文件IO 例子
例子1: 测试最多打开多少个文件
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int main(int argc, const char *argv[])
- {
- int fd;
- int cnt = ;
- while() //循环打开
- {
- if((fd=open(argv[],O_RDWR))<) //打开文件返回文件描述符, 0,1,2 是系统开启进程自动分配的 标准输入,输出,出错
- break;
- cnt++; //正确打开文件,计数加1
- printf("fd=%d\n",fd);
- }
- printf("cnt = %d\n",cnt);
- close(fd);//关闭文件
- return ;
- }
测试: 运行程序 ./a.out tt.txt > file.txt ------ tt.txt 是程序中argv[1] 打开的文件, > 表示重定向,把内容输入到文件file.txt中,在终端显示会很多内容
例子2; 关于文件描述符
例子3 : read的使用
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- int main(int argc, const char *argv[])
- {
- char buf[] = {};
- #if 0
- //从终端读取数据
- read(,buf,);
- printf("buf = %s\n",buf);
- #endif
- //从文件读取数据
- int fd;
- fd = open(argv[],O_RDONLY);
- if(fd < )
- {
- perror("open fail : ");
- return -;
- }
- ssize_t bytes;
- int i = ;
- bytes = read(fd,buf,); //读取fd文件内容放到buf中,每次读取10个,返回读取到的个数
- printf("bytes = %d->",bytes);
- printf("buf = [%s]\n",buf);
- for(i=;i<;i++) //没次读完把buf清空防止影响下次使用
- buf[i] = ;
- bytes = read(fd,buf,);
- printf("bytes = %d->",bytes);
- printf("buf = [%s]\n",buf);
- for(i=;i<;i++)
- buf[i] = ;
- bytes = read(fd,buf,);
- printf("bytes = %d->",bytes);
- printf("buf = [%s]\n",buf);
- for(i=;i<;i++)
- buf[i] = ;
- close(fd);
- return ;
- }
测试
例子4 :write 写数据
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- int main(int argc, const char *argv[])
- {
- char buf[] = "hello world!\n";
- #if 0
- //写数据到终端
- write(,buf,);
- #endif
- #if 1
- //写数据,到文件
- int fd;
- fd = open(argv[],O_WRONLY|O_CREAT|O_TRUNC);//只读方式打开,没有创建,打开清空文件
- if(fd < )
- {
- perror("open fail : ");
- return -;
- }
- write(fd,buf,);//把buf的内容写到fd指向的文件中,写入20个字符
- close(fd);
- #endif
- return ;
- }
测试
例子5 :read和write实现文件内容复制
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- int main(int argc, const char *argv[])
- {
- char buf[] = "hello world!";
- //写数据,到文件
- int fd_r,fd_w;
- fd_r = open(argv[],O_RDONLY); //只读方式打开
- if(fd_r < )
- {
- perror("open fail : ");
- return -;
- }
- fd_w = open(argv[],O_WRONLY); //只写方式打开
- if(fd_w < )
- {
- perror("open fail : ");
- return -;
- }
- int read_len = ;
- while()
- {
- read_len = read(fd_r,buf,);
- if(read_len == )//当读取到0个字符时,即为读到文件末尾,出错发挥-1
- {
- break;
- }
- write(fd_w,buf,read_len);//把读取到的长度是写入另外的文件长度
- }
- close(fd_r);
- close(fd_w);
- return ;
- }
测试
例子6 : lseek文件偏移量
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- int main(int argc, const char *argv[])
- {
- char buf[] = "hello world!";
- //写数据,到文件
- int fd_r;
- fd_r = open(argv[],O_RDWR | O_TRUNC,); //读写方式打开,清空打开
- if(fd_r < )
- {
- perror("open fail : ");
- return -;
- }
- write(fd_r,buf,sizeof(buf));//写数据到文件
- off_t off;
- off = lseek(fd_r,,SEEK_CUR);//获取当前偏移量
- printf("当前 off = %ld\n",off);
- off = lseek(fd_r,,SEEK_SET); //在文件起始位置偏移 3
- printf("SEEK_SET off = %ld\n",off);
- write(fd_r,"",);//偏移后向文件中写入数据
- lseek(fd_r,-,SEEK_END); // 在文件末尾向前偏移 5 在写入数据
- write(fd_r,"ABCD",);
- close(fd_r);
- return ;
- }
测试: fd_r = open(argv[1],O_RDWR | O_APPEND,0666); //读写方式打开,追加打开,设置了偏移量也只能在文件末尾添加
文件IO 例子的更多相关文章
- 转 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Java文件IO操作应该抛弃File拥抱Paths和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...
- Java 文件IO续
文件IO续 File类 用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...
- Java 文件IO
文件IO Java IO IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 按操作数据分为 字节流和字符流 字符流的 ...
- 文件IO
在unix世界中视一切为文件,无论最基本的文本文件还是网络设备或是u盘,在内核看来它们的本质都是一样的.大多数文件IO操作只需要用到5个函数:open . read . write . lseek 以 ...
- 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- Golang文件IO 一
Golang文件IO 一 文件IO编程最基本.最常用的就属读写文件操作了.ioutil包实现了一些IO实用功能,其中就包括非常简捷.好用的文件读取功能. ioutil包有7个函数1个变量: var D ...
- UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >
春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动. 上周末在元大都遗址公园海棠花溪拍的海棠花. 进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...
随机推荐
- html - body标签中相关标签
body标签中相关标签 今日内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup> ...
- 项目中AOP的实例应用
其中包括了权限管理.表单验证.事务管理.信息过滤.拦截器.过滤器.页面转发等等. 公司项目的应用:(涉及用户验证登录以及用户是否有管理员权限.心理用户权限等),还有涉及的其他日志管理代码就不一一举例了 ...
- es+mongodb 整合
之前公司项目的数据都是从mysql查询,后面需求变更:同时技术上相应的也要改变策略,决定将mongodb和mysql的数据通过es建立索引来查询: 对于还没有接触或者真正了解es的可以先看一下相关Lu ...
- C语言指向指针的指针
#include <stdio.h> int main() { /********************************************* * 指向指针的指针:指针变量存 ...
- 《代码大全2》读书笔记 Week8
这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...
- ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法
一.效果展示 使用方法: 1.npm安装ionic-gallary-modal扩展模块 npm install ionic-gallery-modal --save 2.在app.module.ts根 ...
- Ansible 和 Playbook 暂存
Ansible 和 Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单 HOST Inventory 模块插件 Playbooks 查看ansible的目录结构 ...
- XML解析方式有哪些?
1.DOM:要求解析器吧整个XML文档装载到内存,并解析成一个Document对象. (1).优点:元素与元素之间保留结构关系,故可以进行增删改查操作. (2).缺点:XML文档过大,可能出现内存溢出 ...
- XCode升级之后(7-->8),控制打印问题(打印一些烂七八糟的东西)解决办法
1. 2. 3. 搞定!
- MySql查询结果按照指定顺序排序
Mysql这功能做的很好用啊!! 让查询结果按照指定顺序排序 --------------------------------------------------------------------- ...