fcntl.h函数库的常用函数使用

前言

这节学习fcntl.h函数库中的几个常用的原型函数,通过这些常用的原型函数完成编程中对文件的打开、数据写入、数据读取、关闭文件的操作。

定义

头文件:

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

打开文件

1、函数定义:int open( const char * pathname, int flags);
2、函数定义:int open( const char * pathname,int flags, mode_t mode);

返回值:成功则返回文件描述符,否则返回-1

函数说明:

  • 参数pathname 指向要打开的文件路径

  • 参数flags 定义以什么权限打开要修改的文件,flash分为单独权限操作和组合权限操作,具体如下

flags单独使用:

 O_RDONLY   # 以只读方式打开文件
 O_WRONLY   # 以只写方式打开文件
 O_RDWR     # 以读写方式打开文件

flags利用OR(|)运算符组合使用

 O_CREAT            # 若欲打开的文件不存在则自动建立该文件。
 O_EXCL or O_CREAT  # 检查文件是否存在,若不存在则建立该文件
 O_CREAT or O_EXCL  # 如果打开的文件为符号连接,则会打开文件失败。
 O_NOCTTY           # 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
 O_TRUNC            # 若文件存在并且以可写的方式打开时,文件中的内容将被清空。
 O_APPEND           # 当读写文件时会从文件尾开始移动,将后面要写入的数据会以附加的方式加入到文件后面。
 O_NONBLOCK         # 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
 O_NDELAY           # 与 O_NONBLOCK 相同。
 O_SYNC             # 以同步的方式打开文件。
 O_NOFOLLOW         # 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
 O_DIRECTORY        # 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。
 O_NOATIME          # 从linux 2.6.8内核开始,读文件不更新文件最后访问时间

这里不讲解第2个函数的使用!

关闭文件

函数定义:int close(int fd);

返回值:若文件顺利关闭则返回0,发生错误时返回-1

函数说明:

当使用完文件后若已不再需要可使用该函数关闭文件,close()会让数据写回磁盘,并释放该文件所占用的资源。

参数fd为先前由open()creat()所打开的文件名。

读取数据

函数定义:ssize_t read(int fd,void * buf ,size_t count);

返回值:

  • 若参数count为0,则read()不会有作用并返回0。

  • 若参数count不为0,则返回要求读取的count个字节数,如果返回0,表示已到达文 件尾或者无法读取文件的数据

函数说明:read()函数把参数fd 所指的文件传送count个字节到buf指针所指的内存中。如果顺利read()会返回实际读到的字节数,在编程时最好使用该返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾或发生了其它的异常,当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。

注意:使用read()函数时要求文件处于打开状态,此外文件读写位置会随读取到的字节移动。

写入数据

定义函数:ssize_t write (int fd,const void * buf,size_t count);

返回值:如果正常write()会返回实际写入的字节数,当有错误发生时则返回-1

函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。文件读写位置会随写入的字节数移动。当写入异常时,错误代码存入errno中。错误代码EINTR 此调用被信号所中断。EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。EADF 参数fd非有效的文件描述词,或该文件已关闭。

注意:使用write()函数时要求文件处于打开状态,此外文件读写位置会随写入的字节数移动。

其它函数

  • creat(建立文件)

函数定义:int creat(const char * pathname, mode_tmode);
  • dup(复制文件描述词)

函数定义:int dup (int oldfd);
  • dup2(复制文件描述词)

函数定义:int dup2(int odlfd,int newfd);
  • fcntl(文件描述词操作)

函数定义:

int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd,long arg);
int fcntl(int fd, int cmd,struct flock * lock);
  • flock(锁定文件或解除锁定)

函数定义:int flock(int fd,int operation);
  • fsync(将缓冲区数据写回磁盘)

函数定义:int fsync(int fd);
  • lseek(移动文件的读写位置)

函数定义:off_t lseek(int fildes,off_t offset ,int whence);
  • sync(将缓冲区数据写回磁盘)

函数定义:int sync(void);
  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值