当前位置: 首页 > news >正文

怎么建设国际网站长沙网站优化排名推广

怎么建设国际网站,长沙网站优化排名推广,wordpress视频模板下载,常州模板网站建设价位学习笔记 参考链接1 、参考链接2以及百度百科 在进行C语言学习的时候我们了解到了C语言相关的一些IO操作#xff0c;如fopen#xff0c;fwrite#xff0c;fread#xff0c;fprintf#xff0c;fclose等相关函数#xff0c;他们都是由C库函数提供的一些函数#xff0c;是…学习笔记 参考链接1 、参考链接2以及百度百科 在进行C语言学习的时候我们了解到了C语言相关的一些IO操作如fopenfwritefreadfprintffclose等相关函数他们都是由C库函数提供的一些函数是将操作系统的系统调用加以封装虽说Linux是由C语言实现的但为了使我们更加的了解Linux就需要了解更接近与底层的一些IO操作因此就需要来了解下基本的系统调用—openwritereadclose 首先我们来了解下openwritereadclose的系统调用 open #include sys/types.h #include sys/stat.h #include fcntl.h int open(const char *pathname, int flags, mode_t mode); open有三个参数 pathname要打开或创建的目标文件名 flags对文件进行多种操作也就有有多个参数这多个参数可以进行或运算即就是flags 参数 O_RDONLY:只读打开 O_WRONLY:只写打开 O_RDWR:读写打开 O_CREAT:若文件不存在创建文件 O_APPEND:追加写 参数123必须制定一个且只能制定一个使用参数4必须使用open的第三个参数mode新文件的访问权限 返回值成功新打开文件的文件描述符fd 失败-1 write #include unistd.h ssize_t write(int fd, const void *buf, size_t count); fd文件描述符 buf写入的缓冲区 count写的字符长度也就是看你需要写多少 返回值 如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1错误代码存入errno中。 read #include unistd.h ssize_t read(int fd, void *buf, size_t count); fd文件描述符 buf读入的缓冲区 count写的字符长度也就是看你需要写多少 返回值 如果顺利read()会返回实际写入的字节数。当有错误发生时则返回-1错误代码存入errno中。 close #include unistd.h int close(int fd); close的参数就相对简单了这一个操作是不能遗漏的只要了使用fd就必须close它 在这几个函数中都涉及到了关键的参数fd因此要了解这几个函数就必须先了解下文件描述符fd。 什么是文件描述符这是一个相对抽象的概念我们先来看看下面这张图 在PCB结构体中存在一个files指针它指向一个file_struct结构体而在file_struct结构体中存在一个file* fd数组这个数组里面存放的是file指针用来指向不同的file文件而fd就可以理解为这个指针数组的下标因此要打开一个文件我们就可以拿到该文件的fd就可以了。 fd的分配原则 在files_struct数组当中使用没有被使用的最小下标作为新的文件描述符。 操作系统默认使用了该数组的前三个元素0号下标指向标准输入stdin1号下标指向标准输出stdout2号下标指向标准错误stderr。 因此正常情况下新的fd都是从3开始的但如果我们关闭了默认的fd新的文件的fd就从关闭的fd处开始。 说到了fd我们就不得不来区分下FILE和fd FILE是C库当中提供的一个结构体而fd是系统调用更加接近于底层因此FILE中必定封装了fd。 我们可以来看看FILE的结构体 typedef struct _IO_FILE FILE;在/usr/include/stdio.h 它的结构体中有这么一段 struct _IO_FILE {int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags//缓冲区相关/* The following pointers correspond to the C streambuf protocol. *//* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */char* _IO_read_ptr; /* Current read pointer */char* _IO_read_end; /* End of get area. */char* _IO_read_base; /* Start of putbackget area. */char* _IO_write_base; /* Start of put area. */char* _IO_write_ptr; /* Current put pointer. */char* _IO_write_end; /* End of put area. */char* _IO_buf_base; /* Start of reserve area. */char* _IO_buf_end; /* End of reserve area. *//* The following fields are used to support backing up and undo. */char *_IO_save_base; /* Pointer to start of non-current get area. */char *_IO_backup_base; /* Pointer to first valid character of backup area */ char *_IO_save_end; /* Pointer to end of non-current get area. */struct _IO_marker *_markers;struct _IO_FILE *_chain;int _fileno;//fd的封装 可以看到int_fileno就是对fd的封装在这一部分的开头有一大段跟缓冲区相关的内容为什么要诺列出它呢首先可以来看一个很诡异的例子 #include stdio.h #include string.h#include unistd.h#include sys/stat.h#include sys/types.h#include fcntl.hint main(){const char *msg1 hello printf\n;const char *msg2 hello fwrite\n;const char *msg3 hello write\n;printf(msg1);fwrite(msg2, 1, strlen(msg2), stdout);write(1, msg3, strlen(msg3));fork();return 0;} 运行结果 [rlhlocalhost test]$ ./hello hello printf hello fwrite hello write 但当我们对进程实现输出重定向你就会发现诡异的事情 [rlhlocalhost test]$ ./hello file [rlhlocalhost test]$ cat file hello write hello printf hello fwrite hello printf hello fwrite 这是为什么呢这是跟C库的缓冲数据有关C库缓冲数据分为三种1、无缓冲2、行缓冲3、全缓冲。 行缓冲就是往显示器上写全缓冲就是往文件里写。 在上面的现象中write不受影响是因为它属于系统调用没有缓冲区而printf和fwrite会自带缓冲区当发生重定向到普通文件的时候它就会从行缓冲转变为全缓冲也就是会往文件里面写写但是我们缓冲区里的数据即使fork也不会立即被刷新当进程退出后会统一刷新写入文件但是fork的时候会发生写时拷贝也就是当父进程准备刷新的时候子进程就已经有了一份相同的数据所以就会产生上面的现象。 了解下重定向。 重定向分为三种 输出重定向 也就是关闭fd为1下标所指向的内容 输入重定向 同理就是关闭fd为0下标所指向的内容 追加重定向 后面多一个追加选项 stat函数 #include sys/stat.h #include unistd.h int stat(const char *file_name, struct stat *buf); 函数说明: 通过文件名filename获取文件信息并保存在buf所指的结构体stat中 返回值: 执行成功则返回0失败返回-1错误代码存于errno 错误代码: ENOENT 参数file_name指定的文件不存在 ENOTDIR 路径中的目录存在但却非真正的目录 ELOOP 欲打开的文件有过多符号连接问题上限为16符号连接 EFAULT 参数buf为无效指针指向无法存在的内存空间 EACCESS 存取文件时被拒绝 ENOMEM 核心内存不足 ENAMETOOLONG 参数file_name的路径名称太长 eg: #include sys/stat.h #include unistd.h #include stdio.hint main() {struct stat buf;stat(/etc/hosts, buf);printf(/etc/hosts file size %d/n, buf.st_size); } struct stat {dev_t st_dev; //文件的设备编号ino_t st_ino; //节点mode_t st_mode; //文件的类型和存取的权限nlink_t st_nlink; //连到该文件的硬连接数目刚建立的文件值为1uid_t st_uid; //用户IDgid_t st_gid; //组IDdev_t st_rdev; //(设备类型)若此文件为设备文件则为其设备编号off_t st_size; //文件字节数(文件大小)unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)unsigned long st_blocks; //块数time_t st_atime; //最后一次访问时间time_t st_mtime; //最后一次修改时间time_t st_ctime; //最后一次改变时间(指属性) }; 先前所描述的st_mode 则定义了下列数种情况 S_IFMT 0170000 文件类型的位遮罩S_IFSOCK 0140000 scoketS_IFLNK 0120000 符号连接S_IFREG 0100000 一般文件S_IFBLK 0060000 区块装置S_IFDIR 0040000 目录S_IFCHR 0020000 字符装置S_IFIFO 0010000 先进先出S_ISUID 04000 文件的(set user-id on execution)位S_ISGID 02000 文件的(set group-id on execution)位S_ISVTX 01000 文件的sticky位S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限S_IRGRP 00040 用户组具可读取权限S_IWGRP 00020 用户组具可写入权限S_IXGRP 00010 用户组具可执行权限S_IROTH 00004 其他用户具可读取权限S_IWOTH 00002 其他用户具可写入权限S_IXOTH 00001 其他用户具可执行权限 上述的文件类型在POSIX中定义了检查这些类型的宏定义 S_ISLNK (st_mode) 判断是否为符号连接S_ISREG (st_mode) 是否为一般文件S_ISDIR (st_mode) 是否为目录S_ISCHR (st_mode) 是否为字符装置文件S_ISBLK (s3e) 是否为先进先出S_ISSOCK (st_mode) 是否为socket
http://www.zqtcl.cn/news/498140/

相关文章:

  • 云服务器安装win系统做网站seo三人行论坛
  • 电气网站设计机械设计软件solidworks
  • 内网网站建设所需硬件设备厦门关键词排名提升
  • 网站动态海报效果怎么做的最专业网站建
  • 学校如何建设网站北京市住房及城乡建设部网站
  • 响应式网站制作流程全国城建培训中心官网查询证书
  • 北京工程建设信息网站中国市场网
  • xml做网站源码免费网站是
  • 中国工商建设标准化协会网站织梦app网站模板
  • 怎么做好网络销售文大侠seo博客
  • wish网站应该怎么做网站建设前规划
  • 网站建设目的是什么建筑机械人才培训网官网
  • 建筑建设行业网站大型购物网站开发
  • 手机网站开发用什么设计之家网
  • 网站开发平台有哪些什么是网络开发
  • 学校网站前置审批网站做哪些比较有意思
  • 怎么给企业做网站学计算机网站建设
  • 网站关键词优化排名技巧aiyuan wordpress
  • 建设工程资质证书二维码扫描网站自己做的网站如何让qq登录
  • 网站域名有效期wordpress 特别慢
  • 建立个人网站服务器如何用dedecms做网站
  • php网站开发实市场推广策略 包括哪些
  • 合众商道网站开发可以投稿的写作网站
  • 北京贸易公司网站制作免费的查企业的网站
  • 网站建设报价表模板下载小程序怎么找出来
  • 网站制作简单协议wordpress快速建站教程视频教程
  • 杭州做网站价格北京企业响应式网站建设
  • 30个成功的电子商务网站设计中企动力 网站报价
  • php 网站开发 视频百度seo排名查询
  • 网站开发代码wordpress提示安装