【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

发布时间:2023年12月21日

😁博客主页😁:🚀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 函数可以打开或创建一个文件。
open 函数返回的文件描述符一定是最小的未用描述符值。

?2.1 函数原型

#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:成功返回文件描述符,出错返回-1

仅当创建新文件时才使用第三个参数mode

?2.2 flags 参数

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)都将阻止调用过程,直到数据已物理写入底层硬件。

在这里插入图片描述

🎄三、creat 函数

函数原型如下:

#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 函数

close 函数用于关闭一个文件。
函数原型:

#include <unistd.h>
int close(int fd);

关闭一个文件时,还会释放该进程加在该文件上的所有记录锁。

在这里插入图片描述

🎄五、总结

👉本文简单文件I/O操作的三个函数:open、creat、colse 函数。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏?,支持一波,谢谢 😁😁😁

文章来源:https://blog.csdn.net/wkd_007/article/details/135117215
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。