文件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 ...
随机推荐
- UVALive 4794 Sharing Chocolate
Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...
- Android开发 Butterknife使用方法总结
前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...
- redis Sorted set 相关命令
- Spring Boot 集成Mybatis实现多数据源
静态的方式 我们以两套配置方式为例,在项目中有两套配置文件,两套mapper,两套SqlSessionFactory,各自处理各自的业务,这个两套mapper都可以进行增删改查的操作,在这两个主MYS ...
- Mongodb导入本地数据(.dat)到仓库(window)
借鉴文章,完成了数据文件导入到Mongodb, 尊重作者版权:https://blog.csdn.net/weixin_44198965/article/details/100022616 1.找到你 ...
- Vue学习笔记【11】——Vue调试工具vue-devtools的安装步骤和使用
1.fq安装 2.本地安装: Google浏览器 chrome://extensions/ ,打开扩展程序→打开开发者模式→加载已解压的扩展程序,选择解压后的扩展程序包即可.
- Yii2增、删、改、查
$order_model = OrderHeader::find()->where(['user_id'=>$user_id, 'order_type'=>'1'])->and ...
- CF 1082E Increasing Frequency(贪心)
传送门 解题思路 贪心.对于一段区间中,可以将这段区间中相同的元素同时变成\(c\),但要付出的代价是区间中等于\(c\)的数的个数,设\(sum[i]\)表示等于\(c\)数字的前缀和,Max[i] ...
- centos 安装 git
先安装依赖包yum install -y curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gette ...
- XSS的原理分析与解剖(第二篇)
0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...