1. linux文件操作
# 系统调用
系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。但通过系统调用来访问文件是最直接的方式。系统调用函数直接作用于操作系统内核的设备驱动程序从而实现文件访问。文件描述符fd是一个非负整型值,每新打开一个文件,所获得的fd为当前最大fd加1。
Linux系统默认分配了3个文件描述符值:0-standard input,1-standard output,2-standard error。
open & close
#open
系统调用open的作用是打开一个文件,并返回这个文件的描述符。
##close
close系统调用用于“关闭”一个文件。文件描述符被释放,并能够重新使用。
当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用了这一功能而不显式地用close关闭文件。
头文件:
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
函数原型:
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode );
int close(int fd);
参数说明:
* path:准备打开的文件或设备名字。
* oflags:指出要打开文件的访问模式。
** O_RDONLY 【3选1】以只读方式打开
** O_WRONLY 【3选1】以只写方式打开
** O_RDWR 【3选1】以读写方式打开
*** O_APPEDN 【|可选】以追加方式打开
*** O_TRUNC 【|可选】把文件长度设为零,丢弃以后的内容。
*** O_CREAT 【|可选】如果需要,就按参数mode中给出的访问模式创建文件。
*** O_EXCL 【|可选】与O_CREAT一起调用,确保调用者创建出文件。使用这个模式可防止两个程序同时创建一个文件,如果文件已经存在,open调用将失败。
mode:当使用O_CREAT标志的open来创建文件时,我们必须使用三个参数格式的open调用。第三个参数mode 是几个标志按位OR后得到的。
* S_IRUSR:读权限,文件属主
* S_IWUSR:写权限,文件属主
* S_IXUSR:执行权限,文件属主
* S_IRGRP:读权限,文件所属组
* S_IWGRP:写权限,文件所属组
* S_IXGRP:执行权限,文件所属组
* S_IROTH:读权限,其他用户
* S_IWOTH:写权限,其他用户
* S_IXOTH:执行权限,其他用户