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

国外网站模版免费下载商洛做网站电话

国外网站模版免费下载,商洛做网站电话,阜宁做网站的公司,洛阳市建设监理协会网站目录 ​编辑 系统接口进行文件访问 open 接口介绍 文件描述符fd 重定向 缓冲区 1、缓冲区是什么#xff1f; 2、为什么要有缓冲区#xff1f; 3、怎么办#xff1f; 我们先来复习一下#xff0c;c语言对文件的操作#xff1a; C默认会打开三个输入输出流#xf…目录 ​编辑 系统接口进行文件访问 open 接口介绍 文件描述符fd 重定向 缓冲区 1、缓冲区是什么 2、为什么要有缓冲区 3、怎么办 我们先来复习一下c语言对文件的操作 C默认会打开三个输入输出流分别是stdin, stdout, stderr 1 #includestdio.h2 3 int main()4 {5 FILE *fpfopen(log.txt,w);6 if(fpNULL)7 {8 perror(error!);9 return 1;10 }11 fprintf(fp,hello,%d,%s\n,10,sxh);12 fclose(fp);13 return 0;14 } 系统接口进行文件访问 操作文件除了上述C接口当然C也有接口其他语言也有我们还可以采用系统接口来进行文件访问 #includestdio.h#includestring.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.hint main(){umask(0);int fd open(log.txt,O_WRONLY | O_CREAT |O_TRUNC,0666);if(fd0){ perror(open);return 1;}//const char *message hello Linux!\n;const char * message aaaa\n;write(fd,message,strlen(message));close(fd);}open(log.txt,O_WRONLY | O_CREAT |O_TRUNC,0666);以写方式打开不存在就创建存在就先清空相当于c语言中的  “w”  方式 open 接口介绍 open man 2 open #includ e sys/types.h        #include sys/stat.h        #include fcntl.h        int open(const char *pathname, int flags);        int open(const char *pathname, int flags, mode_t mode)        int creat(const char *pathname, mode_t mode); pathname要打开或创建的目标文件 flags: 打开文件时可以传入多个参数选项用下面的一个或者多个常量进行“或”运算构成;  常见的参数有                         O_RDONLY: 只读打开                         O_WRONLY: 只写打开                         O_CREAT : 若文件不存在则创建它。需要使用mode选项来指明新文件的访问权限                         O_APPEND: 追加写 mode: mode 只有 当 在 flags 中使用 O_CREAT 时才有效 , 否则被忽略. 返回值                 成功新打开的文件描述符                 失败-1 文件描述符fd 我们通过系统调用I/O打开一个文件的返回值就是文件描述符 int fd open(log.txt,O_WRONLY | O_CREAT |O_TRUNC,0666); 这里fd就是log.txt的文件描述符 如果我们同时打开三个文件并把这三个文件的文件描述符打印出来会发现 文件描述符是从3开始的那0、1、2呢 Linux进程默认情况下会有3个缺省打开的文件描述符分别是标准输入0 标准输出1 标准错误2. 0,1,2对应的物理设备一般是键盘显示器显示器 根据上述的图我们可以知道 open干什么 1、创建file 2、开辟文件缓冲区的空间加载文件数据延后 3、查看进程的文件描述符表 4、file地址填入对应的表下标中 5、返回下标 重定向 看一下下面的代码 1 #includestdio.h2 #includesys/types.h3 #includesys/stat.h4 #includefcntl.h5 #includeunistd.h6 #includestring.h7 #includestdlib.h8 const char *filenamelog.txt;9 10 int main()11 {12 //close(0);13 close(1);14 //close(2);15 int fd open(filename,O_CREAT | O_WRONLY | O_TRUNC,0666);16 if(fd0)17 {18 perror(open);19 return 1;20 }21 printf(printf,fd:%d\n,fd);22 fprintf(stdout,fprintf,fd:%d\n,fd);23 24 fflush(stdout);25 26 27 close(fd);28 return 0;29 30 }先看现象 1、如果我们关闭的是0打印出来的log.txt的文件描述符是0关闭的是2则打印出来的文件描述符是2关闭的是1则不会显示出来因为文件描述符1表示的是显示器而我们把显示器关掉了自然打印不出来 2、我们会在log.txt中打印出printf和fprintf的内容 现象解释 文件描述符规则查看自己的文件描述表分配最小的没有使用的文件描述符 由于我们把显示器给关掉了那么文件描述符1就是最小的没有使用的这样log.txt就会被分配1为文件描述符这其实就是一个重定向操作 看下面的图 一开始fd_array[1]指向的是显示器由于close(1),加上open log.txt这样fd_array[1]指向的就是log.txt; 因为重定向的本质是在内核中改变文件描述符特点下标的内容与上层无关 fprintf()/printf()  ---stdout  ---struct FILE ---stdout ----_fileno 1; 所以fprintf()/printf() 看的就是_fileno 1由于重定向后log.txt的fd为1 自然fprintf()/printf()的内容打印到log.txt中 如果我们一直用这种手动重定向的方式比较麻烦可以用系统调用dup2() 看一下代码 1 #includestdio.h2 #includesys/types.h3 #includesys/stat.h4 #includefcntl.h5 #includeunistd.h6 #includestring.h7 #includestdlib.h8 const char *filenamelog.txt;9 10 int main()11 {12 int fd open(filename,O_CREAT | O_WRONLY | O_TRUNC,0666);13 //dup2(fd,1);14 15 printf(hello world,fd:%d\n,fd);16 fprintf(stdout,hello world\n);17 fflush(stdout);18 close(fd);19 return 0;20 }上述的代码运行结果会直接打印到显示器上 如果把dup2(fd,1)复原显示器上不会显示而是在log.txt上显示 其实本质就是将fd覆盖1 指向下标的内容 缓冲区 1、缓冲区是什么 缓冲区就是一段内存空间 2、为什么要有缓冲区 给上层提供高效的IO体验间接提高整体效率 3、怎么办 a、刷新策略                1、立即刷新  fflush(stdout)c语言的刷新、fsync(fd)(系统调用的刷新)                2、行刷新  显示器                3、全缓冲  缓冲区写满才刷新普通文件      b、特殊情况                进程退出系统会自动刷新                强制刷新
http://www.hkea.cn/news/14422815/

相关文章:

  • 权威的顺德网站建设大型网站建设公司
  • 企业网站背景图片杭州网站建设教育机构
  • 宽屏网站模板网站修改域名
  • 建立网站每项内容可以设计成什么php网站后台入口
  • 自己做的网站怎么样把里面的内容下载下来嵌入式软件开发介绍
  • 网站做分享链接定制网站开发广安广播电台
  • 企业门户网站需求模板Seo自己做网站
  • 济南网站优化多少钱中文绿色环保网站模板
  • 厦门维品网站建设景点网站怎么做
  • 校园门户网站设计论文宁化网站建设
  • 铜仁市建设招投标网站网页设计与制作前景如何
  • 营销版网站网站备案和实际的不同
  • 注册网站会不会有风险wordpress 技术类模板
  • 南宁网站定制公司龙华网络推广方式
  • 网站设计方案怎么写网站不备案可以做淘宝客吗
  • 一份完整的网站策划书网站后台传图片传不了
  • 网站编辑做seo好做吗上海公司网站备案
  • 如何识别html5网站广西代理网站建设公司
  • 怎么建个人公司网站深圳网站设计公司哪个好
  • 网站开发建设属于什么费用广州联亨科技网站建设
  • 网站建设 新闻网站 优化 分析
  • 西安小型企业网站建设wordpress 边栏插件
  • 深圳正规网站建设服务wordpress 制作主题
  • 重庆网站建设雪奥科技咨询公司招聘条件
  • 对于网站建设提出建议wordpress更换初始域名
  • 如网站站长如何对付黑客平面设计公司赚钱吗
  • 网站策划表实验中心网站建设的调查问卷
  • 网站模板组件中国建设银行绑定网站
  • 怎么编辑网站源代码赣州智美互联网科技有限公司
  • 建设一个新的网站需要准备什么个人网站怎么盈利