open()是 Linux/Unix 内核提供的底层系统调用,核心功能是打开或创建文件。成功调用后,内核会返回一个整型的文件描述符作为该文件的句柄,后续的所有读写操作都基于此描述符进行。调用时需指定访问模式(如O_RDONLY),以决定程序操作文件内容的权限。
使用open()函数前,需要包含以下头文件:
#include #include #include
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
表示要打开的文件路径,可以是绝对路径或相对路径。
用于指定文件的打开方式,分为互斥模式和可选标志两类。
互斥模式(必须选择一种):

可选标志(通过位或|与互斥模式组合):

仅在flags包含O_CREAT时有效,用于设置新建文件的权限。
mode_t为32位无符号整数,仅低12位有效,分为四组(共12位):

每组3位分别对应读(r=4)、写(w=2)、执行(x=1)权限。
例如0644表示用户可读写,组用户和其他用户只可读。
成功:返回文件描述符(非负整数)
失败:返回-1
下面通过一个具体的例子展示如何以不同方式打开文件,并输出对应的文件描述符。
在/home/elf/work目录下新建open.c文件,内容如下:
#include #include #include #include int main() { // 只读打开,不存在则创建,权限 644 int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644); // 只读打开,若存在则清空,权限 644 int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644); // 读写打开,不存在则创建,权限 664 int fd3 = open("./test3", O_RDWR | O_CREAT, 0664); // 读写打开,若存在则清空,权限 666 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; }
elf@ubuntu:~/work$ gcc open.c -o open elf@ubuntu:~/work$ ./open
程序运行后,输出如下:
fd1: 3 fd2: 4 fd3: 5 fd4: 6
说明:文件描述符从3开始分配,因为0、1、2通常被系统预留给标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。
open()是Linux系统I/O操作的基础函数,通过灵活组合flags参数可实现多种文件打开方式。理解并正确使用open()是进行文件操作、进程间通信和系统编程的重要前提。在实际开发中,应注意错误处理,并确保在不再需要文件描述符时使用 close()函数及时关闭文件,避免资源泄漏。希望本篇文章能为各位小伙伴的实际开发带来帮助,如果在操作中遇到任何疑问,欢迎随时交流讨论。
全部0条评论
快来发表一下你的评论吧 !