例子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. redis 入门之哈希

    hset 将哈希表 hash 中域 field 的值设置为 value .如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 HSET 操作.如果域 field 已经存在于哈希表中, 那么它 ...

  2. mongo import excle

    mongoimport --host 192.*******.** --db **  --collection **  --type csv --headerline --file /*****.cs ...

  3. mysql在插入数据前判断是否存在数据

    记录一次mysql插入数据的操作,要先判断表中是否存在对应的值. 以往我们的操作都是先select,再insert,今天给大家分享另一种操作,一条sql语句来实现: inset into user(u ...

  4. Light项目---vue搭建前端时遇见的一些问题

    css样式中设置的: opacity 表示透明度 将js对象存储到localStorge中 的时候,直接存储是不行的,会变成[object Object],都是这样的数据, 需要将其进行JSON化处理 ...

  5. [转载]Ubuntu Server下配置UTF-8中文环境

    转载自:http://www.gaojinbo.com/ubuntu-server%E4%B8%8B%E9%85%8D%E7%BD%AEutf-8%E4%B8%AD%E6%96%87%E7%8E%AF ...

  6. Dubbox服务的提供方配置

    在src/main/resources下创建applicationContext-service.xml ,内容如下: <?xml version="1.0" encodin ...

  7. string::size_type 页73 size_t 页90

    异同点: size_t size_type sizeof(XXX)所得到的结果的类型就是 string类类型和vector类类型定义的类型,string的size操作返回来的是string::size ...

  8. Delphi 方法:overload、override、virtual、dynamic、abstract

    1.overload 在Pascal语法规则中,同一个UNIT里是不能存在两个同名的函数的,例如: function func(): Boolean; function func(const x: C ...

  9. springboot输出hello world,3种方式(String,JSON,jsp),IDEA开发工具

    新建项目: File -> new -> Project -> Spring Initializr -> Next -> Next -> Next-> Pro ...

  10. thinkphp rpc

    RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...