例子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 例子的更多相关文章

  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. a number of 和the number of用法

    a number of 和the number of用法 1.   A number of + 複數名詞 + 複數動詞           =some/或a lot of + 複數名詞 + 複數動詞 ...

  2. 自定义vant ui steps组件效果实现

    记录个问题,当作笔记吧:因为vue项目的移动端vant ui 的step组件跟ui设计图有差别,研究了半天还是没法使用step组件,只能手动设置一个 先上效果图和代码: (1)HTML部分 <d ...

  3. 认识和学习BASH alias 给长命令起别名 unalias 取消该别名

    此图反映了shell所在的位置与作用. 既然Shell与KDE和application等都是用户与Kernel的接口,那为什么还要学习呢?书中也给出了答案. 通用性,可以这样理解,也就是所谓的跨平台机 ...

  4. MYSQL-连续出现的数字

    编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 ...

  5. mysql的数据导出方法2

    首先,使用mysqldump命令的前提是,在Cmd中进入mysql安装目录下的bin目录下,才可以使用该命令.我的mysql安装在E:盘,所以,首先进入bin目录下:E:/Program Files/ ...

  6. 多媒体查询 @media 报错

    You may not @extend an outer selector from within @media.You may only @extend selectors within the s ...

  7. Android中父View和子view的点击事件的执行过程

    Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解.  一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...

  8. js——private 私有方法公有化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 搭建本地 8.8 W 乌云漏洞库

    这个是关于两个图片马的帖子. https://zhuanlan.zhihu.com/p/27486144 这个是开源地址: https://github.com/m0l1ce/wooyunallbug ...

  10. 微信小程序 在使用wx.request时显示加载中

    微信小程序中,向后台请求数据是,通常想给用户提示正在加载中,如下图: 我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.re ...