Linux系统学习--文件编程(open,write,read、光标lseek)

   日期:2020-07-08     浏览:97    评论:0    
核心提示:Linux文件编程open、read、write操作常用对文件编程的操作如open、read、writeopen解析:write解析read解析补充说明读数据光标位置处理光标解析补充说明:常用对文件编程的操作如open、read、writeopen解析:头文件: #include #include #include 函数原型: int open(const char *pa

Linux文件编程open、read、write操作

  • 常用对文件编程的操作如open、read、write
    • open解析:
    • write解析
    • read解析
    • 补充说明读数据光标位置处理
    • 光标解析
    • 补充说明:

常用对文件编程的操作如open、read、write

open解析:

头文件:

 	#include <sys/types.h>
 	#include <sys/stat.h>
 	#include <fcntl.h>

函数原型:

   int open(const char *pathname, int flags);
   int open(const char *pathname, int flags, mode_t mode);

pathname : 待打开 / 创建文件的路径名
flags : 用于指定打开文件 / 创建文件的方式
mode : 仅当创建新文件(在flags中使用了O_CREAT)时才使用,用于指定文件的访问权限

flags类型有:

  1. O_RDONLY :只读方式打开
  2. O_WRONLY : 只写方式打开
  3. O_RDWR : 可读可写方式打开 (这个较为常用)

除了以上三种权限需指定一种,还有如下权限常数可选择使用:

  1. O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限
  2. O_EXCL 如果同时制定了 O_CREAT,而文件已经存在,则出错
  3. O_APPEND 每次添加数据给文件,都会加到文件的尾端,不会覆盖数据
  4. O_TRUNC 用该权限去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则原来的数据会被清除,新数据重新添加进来

代码样例:

int fa;  //给文件起的编号

//可读可写打开
fa = open(./fire1”,O_RDWR); 

//可读可写,不存在这个文件则会重新创建它
fa = open(./fire1”,O_RDWR|O_CREAT.0600);
//( 0600-> 文件权限 ) 

//如果之前这个文件已经存在数据,那么O_TRUNC会将原来的数据归0(删除),重新录入
fa = open(./fire1”,O_RDWR|O_TRUNC);
//如果之前这个文件已经存在数据,那么O_APPEND会在原来数据基础上换行,加入新的数据。
fa = open(./fire1”,O_RDWR|O_APPEND);

//如果已经存在这个文件,那么O_EXCL会报错
fa = open(./fire1”,O_RDWR|O_EXCL);

write解析

头文件:

 #include <unistd.h>

原型函数

write(int fd, const void *buf, size_t count);

fd:要进行写操作的文件描述词。
buf:需要输出的缓冲区(读入数据的地方,例如字符串等)
count:最大输出字节计数 
返回值:成功返回写入的字节数,出错返回-1并设置errno

代码演示:

//(文件编号,从3开始)
int fa;	

// 输出的缓冲区
char *buf =”liuzheng hen shuai”; 

//(这里不可用sizeof() 测长度 会出问题)
int n_write = write(fa , buf , strlen(buf) );


read解析

头文件:

#include <unistd.h>

函数原型:

read(int fd, void *buf, size_t count);
buf:需要读取的缓冲区
count:最大读取字节计数        
返回值:成功返回读取的字节数(也就是上面write中输入缓冲区buf的数据长度大小),出错返回-1并设置errno,如果在调用read之前已到达文件末尾,则这次read返回0 。  

代码演示:

//给文件起个编号名字
int fa;

// 创建输出的缓冲区
char *buf =”liuzheng hen shuai”; 

//(这里不可用sizeof() 测长度 会出问题)
int n_write = write(fa , buf , strlen(buf) );	//n_write –> 写入多少个字节

//创建读取的缓冲区
char *readBuf;	//readBuf -> 读取文件内容
readBuf = (char *)malloc(sizeof(char) * n_write);

int n_read = read(int fa,readBuf,n_write);	//n_read –> 读取文件内容字节大小

补充说明读数据光标位置处理

光标解析

头文件:

#include<sys/types.h>
#include<unistd.h>

函数类型如下:

  • lseek(fa,0,SEEK_SET);(光标从开头第0个位置开始)

  • lseek(fa,-n_write ,SEEK_CUR); (光标从当前位置开始, -n_write -> 往前面移动 )

  • lseek(fa,-n_write ,SEEK_END);(光标从结尾开始, -n_write -> 往前面移动 ),此时这里的n_write就是你写入文件的数据长度,正负号表明光标向前面移动还是向后面移动

前面write读入数据后,如果要使用read读取数据和数据长度大小,需要用lseek函数将光标重新调整到开头位置进行测量

获取文件指针当前位置:int len = lseek(fd, 0, SEEK_CUR);
获取文件长度:int len = lseek(fd, 0, SEEK_END);

补充说明:

打开的文件一定要记得使用!!!close(文件编号)!!来关闭文件,防止对文件造成损害或者破坏

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服