Linux下基于文件描述符的文件操作

文件打开与关闭

int open(const char* pathname, int flags);//文件名,打开方式
int open(const char* pathname, int flags, mode_t mode);//文件名,打开方式  权限
int create() 	//不常用
int close(int fd);

  1. open出错时返回-1。
  2. flag表示打开或创建的方式,mode表示文件的访问权限。均通过二进制位进行判断。
  3. 对于open函数,如果文件不存在,必须在flags中加上O_CREAT选项。
  4. fb是文件描述词,是由open或create创建文件时的返回值。

文件的读写

#include<unistd.h>
//文件描述词   缓冲区   长度
ssize_t read(int fd, void* buf, size_t count); 
//文件描述词   缓冲区   长度
ssize_t write(int fd, const void* buf, size_t count); 
  1. 对于read和write函数,出错返回-1,读取到文件结束符后返回0,其他情况返回读写个数。
  2. read 在网络通信,阻塞IO情况下,当对端断开时,read返回0 。于此类似的还有 recv函数。
  3. 与printf和scanf有所区别,read和write是将文件读至缓冲区或从缓冲区写入文件,是否会偏移呢?
    a.读写过程中文件描述词fd不会改变,始终指向文件。
    b. read 过程中虽然是相同的文件描述词,但是会存在一个偏移,不会读取已经读取过的文件内容。也就是说对于文件中存放“HelloWorld”,调用两次相同的read,第一次会读进缓冲区“Hello”,第二次读进缓冲区"World" 。缓冲区中内容会被覆盖。
    c. write过程类似,文件中会产生偏移,而对于缓冲区不会,两次调用write,缓冲区中存放“HelloWorld”,文件中会是"HelloHello"。
    d.write和read共用一个文件中的偏移。

改变文件大小

#include<unistd.h>
//将fd指定文件的大小,改为参数length指定大小。
int ftruncate(int fd,  off_t length);
  1. fd必须表示的是打开的可写入的文件描述词。
  2. 如果原来文件比length大,则超过部分会被删除。
  3. 返回值 成功返回0, 失败返回-1 。

文件定位

#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  1. whence /wens/ adv 从哪里;从何处。
  2. offset表示偏移量
  3. whence 可以取值为 SEEK_SET,SEEK_CUR,SEEK_END,分别表示文件开头,光标当前位置以及文件尾。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值