1.open
用于打开或者创建一个文件。
2.头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
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 <sys/types.h>
#include <sys/stat.h> #include <fcntl.h> #include <stdio.h> 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:%dn", fd1); printf("fd2:%dn", fd2); printf("fd3:%dn", fd3); printf("fd4:%dn", fd4); return 0; } |
7.编译运行并查看测试结果
| fd1:3 ??????????????????//从3开始说明0、1、2确实被系统占用
fd2:4 fd3:5 fd4:6 |
371