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

来源:互联网 发布:php curl post提交 编辑:程序博客网 时间:2024/06/08 09:25

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);

返回值:

  若参数count0,则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)

 

 

原创粉丝点击