第七第八章学习笔记
学习笔记:文件操作和系统调用
文件操作级别
文件操作通常可以分为三个级别:
- 低级别文件操作:直接访问文件的二进制数据,通常由操作系统提供支持。
- 文件I/O操作:使用高级别的API(如C的
stdio
库)来读取和写入文件。 - 文件系统操作:使用文件系统调用访问和管理文件,如POSIX标准中的系统调用。
文件I/O操作
文件I/O操作是在高级别上进行文件读写的方式。以下是一些常见的文件I/O操作函数(使用C语言为例):
#include <stdio.h>
int main() {
FILE *file;
char buffer[100];
// 打开文件进行读取
file = fopen("example.txt", "r");
// 从文件中读取数据
fgets(buffer, sizeof(buffer), file);
// 关闭文件
fclose(file);
// 打开文件进行写入
file = fopen("output.txt", "w");
// 写入数据到文件
fprintf(file, "Hello, World!");
// 关闭文件
fclose(file);
return 0;
}
低级别文件操作
低级别文件操作允许直接访问文件的二进制数据,通常需要使用系统调用。这包括使用open()
、read()
、write()
、lseek()
等函数。
#include <fcntl.h>
#include <unistd.h>
int main() {
int file_descriptor;
char buffer[100];
// 打开文件进行读取
file_descriptor = open("example.txt", O_RDONLY);
// 从文件中读取数据
read(file_descriptor, buffer, sizeof(buffer));
// 关闭文件
close(file_descriptor);
// 打开文件进行写入
file_descriptor = open("output.txt", O_WRONLY | O_CREAT, 0644);
// 写入数据到文件
write(file_descriptor, "Hello, World!", 13);
// 关闭文件
close(file_descriptor);
return 0;
}
EXT2文件系统简介
EXT2(Second Extended File System)是Linux操作系统中广泛使用的文件系统。它具有高性能和稳定性,支持文件和目录的管理。
系统调用
系统调用是操作系统提供的接口,用于应用程序与操作系统内核之间的通信。它们允许应用程序执行底层操作,如文件访问、进程管理等。
简单的系统调用
一些简单的系统调用包括:
open()
:打开文件。read()
:从文件中读取数据。write()
:向文件写入数据。close()
:关闭文件。lseek()
:移动文件指针。
常用的系统调用
常用的系统调用包括:
fork()
:创建新进程。exec()
:执行新程序。wait()
:等待子进程结束。pipe()
:创建管道。select()
:多路复用I/O。
链接文件
链接文件允许一个文件关联到另一个文件,有两种类型的链接:硬链接和符号链接。
- 硬链接:多个文件条目指向同一个磁盘数据块。
- 符号链接:创建一个指向另一个文件的链接。
当涉及基于Linux系统的文件操作和系统调用时,有一些额外的知识点和实践内容可以添加到学习笔记中:
基于Linux的文件操作
Linux系统提供了丰富的命令行工具和shell脚本,用于文件操作。以下是一些常用的Linux文件操作命令:
ls
:列出目录中的文件和子目录。cp
:复制文件或目录。mv
:移动文件或目录。rm
:删除文件或目录。chmod
:修改文件权限。chown
:修改文件所有者。find
:在文件系统中查找文件。grep
:搜索文件中的文本。tar
:压缩和解压文件和目录。
Linux文件权限
Linux使用一套权限模型来控制文件和目录的访问权限。这包括读取(r)、写入(w)和执行(x)权限,分为所有者、组和其他用户。权限可以使用chmod
命令进行修改。
系统调用在Linux中的应用
Linux系统调用是在应用程序和内核之间的桥梁,它们可以用于执行各种任务,如进程管理、文件操作、网络通信等。以下是一些在Linux中广泛使用的系统调用:
fork()
和exec()
:用于创建新进程并执行其他程序。pipe()
:用于创建进程间通信的管道。socket()
:用于网络编程。poll()
和epoll()
:用于多路复用I/O。mmap()
:用于内存映射文件。
实践内容
- 使用Linux命令行工具创建一个新的目录,并在其中创建几个文件和子目录。
- 使用
chmod
和chown
命令修改文件和目录的权限和所有者。 - 使用
find
命令查找特定类型的文件,并执行一些操作,如删除或移动。 - 编写一个简单的Shell脚本,演示如何使用Linux命令来自动化文件操作任务。
- 创建一个网络套接字,并使用系统调用编写一个简单的服务器和客户端程序。
- 使用
mmap()
系统调用将文件映射到内存,以进行高效的文件读写操作。
这些额外的知识点和实践内容将帮助你更深入地理解Linux系统下的文件操作和系统调用。请根据你的兴趣和需求选择相应的任务进行练习。如果你有任何问题或需要更多信息,请随时提问。
实践内容
- 创建一个文本文件
example.txt
并写入一些文本内容。 - 使用C编写程序,通过文件I/O操作读取
example.txt
的内容并写入到另一个文件output.txt
。 - 使用低级别文件操作完成相同的任务。
- 探索Linux中的EXT2文件系统,了解其结构和特性。
- 编写一个C程序,演示常用的系统调用,如创建子进程、执行其他程序等。
- 创建一个硬链接和一个符号链接,演示它们的区别和使用场景。