linux文件的IO操作.doc
linux文件的I/O操作
1、具体来说,有以下几种文件类型(控制台ls -l命令的第一列即为文件类型):
符号类型符号类型s套接字文件d目录文件l链接文件b块设备文件c字符设备文件p管道文件-普通文件
另外,有几个特殊的文件,标准输入,标准输出,标准出错
类型文件描述符说明标准输入0它是命令的输入,默认是键盘,也可以是文件或其他命令的输出。使用''或'1>'符号进行重定向。标准出错2它是命令出错信息的输出,默认是屏幕,也可以是其他文件。使用'2>'符号进行重定向。
2、LINUX通过文件权限,来管理文件的读/写/执行(wrx)权限。
3/文件操作函数总结:
在开始列写具体函数之前,我们首先列出文件I/O中的常用参数表:
flag参数(头文件:fcntl.h)
取值含义O_RDONLY以只读方式打开文件O_WRONLY以只写方式打开文件O_RDWR以读写方式打开文件O_CREAT若要打开的文件不存在,则创建一个。权限在mode参数中说明O_EXCL与O_CREAT配合使用以验证一个文件是否存在O_TRUNC如果文件存在,且以只读或只写方式打开,则将其长度截短为0O_NOCTTY如果文件描述符指向终端设备,则不将此设备分配为此进程控制终端O_APPEND写入时追加到文件结尾O_NONBLOCK将后续的I/O操作设置为非阻塞方式O_NONELAY功能不那么完善的O_NONBLOCKO_SYNC只有数据被写入外存或其他设备之后操作才返回
mode参数(头文件:fcntl.h)
取值八进制含义S_ISUID04000设置用户识别号S_ISGID02000设置组号S_SVTX01000粘贴位S_IRUSR00400文件所有者的读权限位S_IWUSR00200文件所有者的写权限位S_IXUSR00100文件所有者的执行权限位S_IWGRP00040该组用户的读权限位S_IRGRP00020该组用户的写权限位S_IXGRP00010该组用户的执行权限位S_IROTH00004其他组用户的读权限位S_IWOTH00002其他组用户的写权限位S_IXOTH00001其他组用户的执行权限位S_IRWXU00600文件所有者的读+写+执行权限S_IRWXG00060该组用户的读+写+执行权限S_IRWXO00006其他组用户的读+写+执行权限
whence参数(头文件:sys/types.h)
取值含义SEEK_SET将该文件的位移量设置为距文件开始处offset个字节处SEEK_CUR将该文件的位移量设置为距当前位置offset个字节处。offset可正可负。SEEK_END将该文件的位移量设置为距文件结尾处offset个字节处offset可正可负。
cmd参数(头文件:fcntl.h)
取值相应操作F_DUPFD复制一个现存文件描述符F_GETFD获得文件描述符F_SETFD设置文件描述符F_GETFL获得文件状态标志F_SETFL设置文件状态标志F_GETOWN获得异步I/O权F_SETOWN设置异步I/0权F_GETLK获得记录锁F_SETLK设置记录锁,不等待F_SETLKW设置记录锁,必要时等待
3、文件描述符的I/O操作
打开函数
#include
#include
#include
int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
两个函数在成功后都返回文件描述符,以用作后续操作,并且将该文件的引用计数器值加1;出错返回-1。mode参数可以直接使用八进制表示。
创建函数
#include
int creat(const char *pathname, mode_t mode);
成功则返回文件描述符,以用作后续操作;出错返回-1。创建成功后以只写方式打开文件。
creat函数等效于open(pathname, O_WRONLY | O_CREAT | O_TRUNC,