例子1: 测试最多打开多少个文件

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5.  
  6. int main(int argc, const char *argv[])
  7. {
  8. int fd;
  9. int cnt = ;
  10. while() //循环打开
  11. {
  12. if((fd=open(argv[],O_RDWR))<) //打开文件返回文件描述符, 0,1,2 是系统开启进程自动分配的 标准输入,输出,出错
  13. break;
  14. cnt++; //正确打开文件,计数加1
  15. printf("fd=%d\n",fd);
  16. }
  17. printf("cnt = %d\n",cnt);
  18.  
  19. close(fd);//关闭文件
  20.  
  21. return ;
  22. }

测试: 运行程序 ./a.out tt.txt > file.txt    ------  tt.txt 是程序中argv[1] 打开的文件, > 表示重定向,把内容输入到文件file.txt中,在终端显示会很多内容

例子2; 关于文件描述符

 例子3 : read的使用

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6.  
  7. int main(int argc, const char *argv[])
  8. {
  9. char buf[] = {};
  10. #if 0
  11. //从终端读取数据
  12. read(,buf,);
  13. printf("buf = %s\n",buf);
  14. #endif
  15.  
  16. //从文件读取数据
  17. int fd;
  18. fd = open(argv[],O_RDONLY);
  19. if(fd < )
  20. {
  21. perror("open fail : ");
  22. return -;
  23. }
  24. ssize_t bytes;
  25. int i = ;
  26. bytes = read(fd,buf,); //读取fd文件内容放到buf中,每次读取10个,返回读取到的个数
  27. printf("bytes = %d->",bytes);
  28. printf("buf = [%s]\n",buf);
  29. for(i=;i<;i++) //没次读完把buf清空防止影响下次使用
  30. buf[i] = ;
  31.  
  32. bytes = read(fd,buf,);
  33. printf("bytes = %d->",bytes);
  34. printf("buf = [%s]\n",buf);
  35.  
  36. for(i=;i<;i++)
  37. buf[i] = ;
  38.  
  39. bytes = read(fd,buf,);
  40. printf("bytes = %d->",bytes);
  41. printf("buf = [%s]\n",buf);
  42. for(i=;i<;i++)
  43. buf[i] = ;
  44.  
  45. close(fd);
  46. return ;
  47. }

测试

 例子4 :write 写数据

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. int main(int argc, const char *argv[])
  7. {
  8. char buf[] = "hello world!\n";
  9. #if 0
  10. //写数据到终端
  11. write(,buf,);
  12. #endif
  13. #if 1
  14. //写数据,到文件
  15. int fd;
  16. fd = open(argv[],O_WRONLY|O_CREAT|O_TRUNC);//只读方式打开,没有创建,打开清空文件
  17. if(fd < )
  18. {
  19. perror("open fail : ");
  20. return -;
  21. }
  22. write(fd,buf,);//把buf的内容写到fd指向的文件中,写入20个字符
  23. close(fd);
  24. #endif
  25. return ;
  26. }

测试

 例子5 :read和write实现文件内容复制

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6.  
  7. int main(int argc, const char *argv[])
  8. {
  9. char buf[] = "hello world!";
  10.  
  11. //写数据,到文件
  12. int fd_r,fd_w;
  13. fd_r = open(argv[],O_RDONLY); //只读方式打开
  14. if(fd_r < )
  15. {
  16. perror("open fail : ");
  17. return -;
  18. }
  19.  
  20. fd_w = open(argv[],O_WRONLY); //只写方式打开
  21. if(fd_w < )
  22. {
  23. perror("open fail : ");
  24. return -;
  25. }
  26.  
  27. int read_len = ;
  28. while()
  29. {
  30. read_len = read(fd_r,buf,);
  31. if(read_len == )//当读取到0个字符时,即为读到文件末尾,出错发挥-1
  32. {
  33. break;
  34. }
  35. write(fd_w,buf,read_len);//把读取到的长度是写入另外的文件长度
  36. }
  37.  
  38. close(fd_r);
  39. close(fd_w);
  40. return ;
  41. }

测试

 例子6 : lseek文件偏移量

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6.  
  7. int main(int argc, const char *argv[])
  8. {
  9. char buf[] = "hello world!";
  10.  
  11. //写数据,到文件
  12. int fd_r;
  13. fd_r = open(argv[],O_RDWR | O_TRUNC,); //读写方式打开,清空打开
  14. if(fd_r < )
  15. {
  16. perror("open fail : ");
  17. return -;
  18. }
  19. write(fd_r,buf,sizeof(buf));//写数据到文件
  20.  
  21. off_t off;
  22. off = lseek(fd_r,,SEEK_CUR);//获取当前偏移量
  23. printf("当前 off = %ld\n",off);
  24.  
  25. off = lseek(fd_r,,SEEK_SET); //在文件起始位置偏移 3
  26. printf("SEEK_SET off = %ld\n",off);
  27.  
  28. write(fd_r,"",);//偏移后向文件中写入数据
  29.  
  30. lseek(fd_r,-,SEEK_END); // 在文件末尾向前偏移 5 在写入数据
  31. write(fd_r,"ABCD",);
  32.  
  33. close(fd_r);
  34. return ;
  35. }

测试:       fd_r = open(argv[1],O_RDWR | O_APPEND,0666); //读写方式打开,追加打开,设置了偏移量也只能在文件末尾添加

文件IO 例子的更多相关文章

  1. 转 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  2. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  3. Java文件IO操作应该抛弃File拥抱Paths和Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...

  4. Java 文件IO续

    文件IO续 File类    用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作    File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...

  5. Java 文件IO

    文件IO Java IO    IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中    按操作数据分为 字节流和字符流        字符流的 ...

  6. 文件IO

    在unix世界中视一切为文件,无论最基本的文本文件还是网络设备或是u盘,在内核看来它们的本质都是一样的.大多数文件IO操作只需要用到5个函数:open . read . write . lseek 以 ...

  7. 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  8. Golang文件IO 一

    Golang文件IO 一 文件IO编程最基本.最常用的就属读写文件操作了.ioutil包实现了一些IO实用功能,其中就包括非常简捷.好用的文件读取功能. ioutil包有7个函数1个变量: var D ...

  9. UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >

    春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动.  上周末在元大都遗址公园海棠花溪拍的海棠花.   进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...

随机推荐

  1. html - body标签中相关标签

    body标签中相关标签   今日内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup> ...

  2. 项目中AOP的实例应用

    其中包括了权限管理.表单验证.事务管理.信息过滤.拦截器.过滤器.页面转发等等. 公司项目的应用:(涉及用户验证登录以及用户是否有管理员权限.心理用户权限等),还有涉及的其他日志管理代码就不一一举例了 ...

  3. es+mongodb 整合

    之前公司项目的数据都是从mysql查询,后面需求变更:同时技术上相应的也要改变策略,决定将mongodb和mysql的数据通过es建立索引来查询: 对于还没有接触或者真正了解es的可以先看一下相关Lu ...

  4. C语言指向指针的指针

    #include <stdio.h> int main() { /********************************************* * 指向指针的指针:指针变量存 ...

  5. 《代码大全2》读书笔记 Week8

    这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...

  6. ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法

    一.效果展示 使用方法: 1.npm安装ionic-gallary-modal扩展模块 npm install ionic-gallery-modal --save 2.在app.module.ts根 ...

  7. Ansible 和 Playbook 暂存

    Ansible  和  Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单  HOST Inventory 模块插件  Playbooks 查看ansible的目录结构 ...

  8. XML解析方式有哪些?

    1.DOM:要求解析器吧整个XML文档装载到内存,并解析成一个Document对象. (1).优点:元素与元素之间保留结构关系,故可以进行增删改查操作. (2).缺点:XML文档过大,可能出现内存溢出 ...

  9. XCode升级之后(7-->8),控制打印问题(打印一些烂七八糟的东西)解决办法

    1. 2. 3. 搞定!

  10. MySql查询结果按照指定顺序排序

    Mysql这功能做的很好用啊!! 让查询结果按照指定顺序排序 --------------------------------------------------------------------- ...