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()函数及时关闭文件,避免资源泄漏。希望本篇文章能为各位小伙伴的实际开发带来帮助,如果在操作中遇到任何疑问,欢迎随时交流讨论。
关注
6074文章
45387浏览量
665224关注
5191文章
20208浏览量
330137免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com