例子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. UVALive 4794 Sharing Chocolate

    Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...

  2. Android开发 Butterknife使用方法总结

    前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...

  3. redis Sorted set 相关命令

  4. Spring Boot 集成Mybatis实现多数据源

    静态的方式 我们以两套配置方式为例,在项目中有两套配置文件,两套mapper,两套SqlSessionFactory,各自处理各自的业务,这个两套mapper都可以进行增删改查的操作,在这两个主MYS ...

  5. Mongodb导入本地数据(.dat)到仓库(window)

    借鉴文章,完成了数据文件导入到Mongodb, 尊重作者版权:https://blog.csdn.net/weixin_44198965/article/details/100022616 1.找到你 ...

  6. Vue学习笔记【11】——Vue调试工具vue-devtools的安装步骤和使用

    1.fq安装 2.本地安装: Google浏览器 chrome://extensions/ ,打开扩展程序→打开开发者模式→加载已解压的扩展程序,选择解压后的扩展程序包即可.

  7. Yii2增、删、改、查

    $order_model = OrderHeader::find()->where(['user_id'=>$user_id, 'order_type'=>'1'])->and ...

  8. CF 1082E Increasing Frequency(贪心)

    传送门 解题思路 贪心.对于一段区间中,可以将这段区间中相同的元素同时变成\(c\),但要付出的代价是区间中等于\(c\)的数的个数,设\(sum[i]\)表示等于\(c\)数字的前缀和,Max[i] ...

  9. centos 安装 git

    先安装依赖包yum install -y curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gette ...

  10. XSS的原理分析与解剖(第二篇)

    0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...