😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 open、creat、colse 函数🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
本文未经允许,不得转发!!!
在Linux系统中,大多数文件I/O只需要用到5个函数:open、read、write、lseek、close
,本文介绍打开、关闭文件的几个函数。creat函数比较少用,因为它可以被open函数取代,可以大概了解一下。
文件描述符
文件描述符是一个非负整数。当打开(open)或创建(creat)一个文件时,内核会向进程返回一个文件描述符。
Linux系统中,文件描述符0、1、2
分别与标准输入、标准输出、标准出错输出
相关联。在POSIX的应用程序中,0、1、2
被替换称STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO
,这些常量定义在<unistd.h>
中。
open 函数可以打开或创建一个文件。
由 open 函数返回的文件描述符一定是最小的未用描述符值。
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:成功返回文件描述符,出错返回-1
仅当创建新文件时才使用第三个参数mode
。
flags 参数用来说明打开文件的选项,可以使用下面一个或多个常量进行或
运算构成参数。
必须三选一的标志:
O_RDONLY
: 只读打开O_WRONLY
:只写打开O_RDWR
:读写打开
- O_APPEND:每次写时追加到文件尾端。
- O_CREAT:若文件不存在,则创建它。使用此选项需要使用第三个参数来指定新文件的访问权限位。
- O_EXCL:如果与O_CREAT同时指定,而文件已存在,则会出错。这样可以测试一个文件是否存在。
- O_TRUNC:如果该文件已经存在并且是常规文件,并且打开模式允许写入(即,为O_RDWR或O_WRONLY),则它将被截断为长度0。如果文件是FIFO或终端设备文件,O_TRUNC标志将被忽略。否则,O_TRUNC的效果未指定。
- O_NOCTTY:如果路径名指的是一个终端设备——参见tty(4)——即使进程没有控制终端,它也不会成为进程的控制终端。
O_NONBLOCK
:如果可能,文件将以非阻塞模式打开。无论是open()还是对返回的文件描述符的任何后续操作,都不会导致调用进程等待。
同步输入、输出选项
- O_SYNC:打开文件进行同步I/O。对结果文件描述符的任何写入(2)都将阻止调用过程,直到数据已物理写入底层硬件。
函数原型如下:
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
返回值:成功返回文件描述符,出错返回-1
此函数等效于:
open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);
crate 函数只能以只写的方式打开所创建的文件,如果想创建一个文件,先写再读,则需要依次调用creat、close,再open。
而使用open函数则可以用下面语句完成:
open(path, O_RDWR | O_CREAT | O_TRUNC, mode);
close 函数用于关闭一个文件。
函数原型:
#include <unistd.h>
int close(int fd);
关闭一个文件时,还会释放该进程加在该文件上的所有记录锁。
👉本文简单文件I/O操作的三个函数:open、creat、colse 函数。
如果文章有帮助的话,点赞👍、收藏?,支持一波,谢谢 😁😁😁