|
1.open 用于打开或者创建一个文件。 2.头文件 #include #include #include 3.函数原型 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 4.参数 1)pathname:表示想要打开的文件的绝对路径名,或者当前路径下的文件名。 2)flags:表示打开文件用的操作,以下三种互斥只能选择其一: O_RDONLY:只读模式。 O_WRONLY:只写模式。 O_RDWR:可读可写。 以下几种可以选用,需要与上面三种其一进行位或( | )运算后使用: O_APPEND :表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。 O_CREAT :表示如果指定文件不存在,则创建这个文件。 O_EXCL :表示如果要创建的文件已存在,则出错,返回-1。 O_TRUNC :表示如果文件存在,并且以只写、读写方式打开,则将其内容清空。 O_NOCTTY :表示把这个终端设备打开后,不用作控制终端。 O_NONBLOCK:以非阻塞模式打开文件。 O_NOFOLLOW :如果打开的文件是一个符号连接, 则打开文件失败, 返回-1。 O_DIRECTORY:如果打开的不是一个目录,则打开文件失败, 返回-1。 O_SYNC:表示每次写入都等待物理I/O完成。 3)mode:表示创建新文件时,设置文件访问权限的初始值,其参数类型为mode_t,是一个u32无符号整型数据,只有低12位有效,并分为四组:000 000 000 000 S U G O S表示特殊权限,U表示文件的所属用户权限,G表示同组用户权限,O表示其他用户权限,每组为3bit,顺序为rwx,r是读(100),w是写(010),x是可执行(001)。 例如0777代表的是000 111 111 111,即没有特殊权限,所有用户都有读写执行的权限。 5.返回值 操作成功返回文件描述符,操作失败返回-1。 6.示例:(以不同的方式分别打开四个文件,并打印各自的文件描述符) #include #include #include #include int main() { int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644); //以只读模式打开test1文件,如果不存在就创建,权限为644 int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644); int fd3 = open("./test3", O_RDWR | O_CREAT, 0664); int fd4 = open("./test4", O_RDWR | O_CREAT | O_TRUNC, 0666); printf("fd1:%d\n", fd1); printf("fd2:%d\n", fd2); printf("fd3:%d\n", fd3); printf("fd4:%d\n", fd4); return 0; } 7.编译运行并查看测试结果 fd1:3 //从3开始说明0、1、2确实被系统占用 fd2:4 fd3:5 fd4:6
|