前言:
Linux 文件系统是指 Linux 操作系统用于组织和管理文件、目录及其元数据(如权限、时间戳等)的系统。文件系统定义了文件的存储、访问和管理的方式,并提供了数据持久性和组织结构。
C语言文件操作
C语言文件
-
FILE*
是一个指向文件的结构体,通过它,程序可以与文件进行交互。 -
文件指针由标准库函数如
fopen()
创建和返回,文件的读写操作通过这个指针来执行。 -
文件指针常用于文件操作函数,如
fopen()
、fread()
、fwrite()
、fclose()
等。
#include <stdio.h>
#include <string.h>
int main()
{
// 打开名为 "log.txt" 的文件以进行写入("w" 模式)
FILE* fd = fopen("log.txt", "w"); //路径默认在当前工作路径
if (fd == NULL) // 如果fopen失败(例如文件无法打开)
{
perror("fopen"); // 输出错误信息,指示fopen失败
return 1; // 返回错误代码(1),表示程序失败
}
const char* msg = "hello linux!\n"; // 定义要写入文件的字符串消息
// 使用strlen计算消息长度,并将消息写入文件
fwrite(msg, strlen(msg), 1, fd);
fclose(fd); // 写入完成后关闭文件
return 0; // 返回0,表示程序成功执行
}
理解当前工作路径:
- 在进程文件读写的时候会进程会记录当前的工作目录(
cwd
),如图:在/home/ocean/linux/file/filetest
路径下创建文件。
- 我们在代码上加上
chdir("/home/ocean/linux/file");
就会更改当前的工作路径,如图查看到的cwd
是: /home/ocean/linux/file
再次执行代码后文件会创建在 /home/ocean/linux/file
这个路径下
文件打开方式
r
- 打开文件进行读取,文件指针定位在文件的开始位置。
- 如果文件不存在,打开失败。
r+
- 打开文件进行读取和写入,文件指针定位在文件的开始位置。
- 如果文件不存在,打开失败。
w
- 打开文件进行写入,如果文件存在,则截断文件至零长度;如果文件不存在,创建文件。
- 文件指针定位在文件的开始位置。
w+
- 打开文件进行读取和写入,如果文件不存在,创建文件;如果文件存在,截断文件至零长度。
- 文件指针定位在文件的开始位置。
a
- 打开文件进行附加写入,写入的内容会追加到文件的末尾;如果文件不存在,创建文件。
- 文件指针定位在文件的末尾。
a+
- 打开文件进行读取和附加写入,读取时从文件的开始位置开始,写入时追加到文件末尾;如果文件不存在,创建文件。
本质上没有必要记那么多,如果需要直接去看官方的文档即可
文件的系统调用
在操作系统中,文件操作通常通过系统调用(system calls
)进行。这些系统调用直接与操作系统的内核交互,以进行文件的创建、读取、写入、删除等操作。
open()
- 功能:打开文件,返回文件描述符。
- 语法:
int open(const char *pathname, int flags, mode_t mode);
- 参数:
pathname
:要打开的文件路径。flags
:指定文件的打开模式(如只读、写入、追加等)。mode
:文件权限,如果文件是新建的,指定文件权限。
- 返回值:成功返回文件描述符(一个非负整数),失败返回 -1,并设置
errno
。