Linux文件操作
1. 文件打开与关闭
open
系统调用
-
功能:打开或创建一个文件。
-
原型:
int open(const char *pathname, int flags, mode_t mode);
-
参数说明:
pathname
:文件路径。例如"testfile.txt"
。flags
:打开文件的标志,常用的标志包括:O_RDONLY
:只读模式。O_WRONLY
:只写模式。O_RDWR
:读写模式。O_CREAT
:如果文件不存在,则创建它。O_TRUNC
:如果文件存在,将其长度截断为0。O_APPEND
:在文件末尾追加数据。
mode
:文件权限模式,仅在使用O_CREAT
标志时有效。常见的权限模式包括:0644
:用户可读写,其他用户只读。0755
:用户可读、写、执行,其他用户可读、执行。
-
返回值:
- 成功时返回文件描述符(非负整数)。
- 失败时返回
-1
,并设置errno
错误码。
-
示例代码:
int fd = open("testfile.txt", O_RDONLY | O_CREAT, 0644);
close
系统调用
-
功能:关闭一个已打开的文件描述符。
-
原型:
int close(int fd);
-
参数说明:
fd
:要关闭的文件描述符。
-
返回值:
- 成功时返回
0
。 - 失败时返回
-1
,并设置errno
错误码。
- 成功时返回
-
示例代码:
close(fd);
2. 文件读写
read
系统调用
-
功能:从文件中读取数据。
-
原型:
ssize_t read(int fd, void *buf, size_t count);
-
参数说明:
fd
:文件描述符。buf
:用于存储读取数据的缓冲区。count
:要读取的最大字节数。
-
返回值:
- 成功时返回实际读取的字节数(可能小于
count
)。 - 如果到达文件末尾,返回
0
。 - 失败时返回
-1
,并设置errno
错误码。
- 成功时返回实际读取的字节数(可能小于
-
示例代码:
char buffer[1024]; ssize_t bytesRead; while ((bytesRead = read(fd, buffer, sizeof(buffer) - 1)) > 0) { write(STDOUT_FILENO, buffer, bytesRead); }
write
系统调用
-
功能:向文件中写入数据。
-
原型:
ssize_t write(int fd, const void *buf, size_t count);
-
参数说明:
fd
:文件描述符。buf
:要写入的数据缓冲区。count
:要写入的字节数。
-
返回值:
- 成功时返回实际写入的字节数。
- 失败时返回
-1
,并设置errno
错误码。
-
示例代码:
write(STDOUT_FILENO, buffer, bytesRead);
3. 文件操作示例
示例1: system_call_test.c
- 功能:演示如何使用
open
、read
和close
系统调用。 - 代码分析:
int main(){ int fd = open("testfile.txt", O_RDONLY | O_CREAT, 0644); if (fd < 0) { perror("Error opening file"); exit(EXIT_FAILURE); } char buffer[1024]; ssize_t bytesRead; while ((bytesRead = read(fd, buffer, sizeof(buffer) - 1)) > 0) { write(STDOUT_FILENO, buffer, bytesRead); } close(fd); }
示例2: open_test.c
- 功能:演示如何使用
open
系统调用。 - 代码分析:
int main(){ int fd = open("user.txt", O_RDONLY | O_CREAT, 0644); if (fd < 0) { printf("Error opening file: %d\n", fd); return 1; } return 0; }
4. Makefile 示例
- 功能:自动化编译和运行C程序。
- 示例代码:
CC := gcc fopen_test: fopen_test.c -$(CC) -o $@ $^ -./$@ -rm -f ./$@ fclose_test: fclose_test.c -$(CC) -o $@ $^ -./$@ -rm -f ./$@
5. 用户文件 users.txt
- 内容:
zhangsan 18 nan lisi 23 nv wangwu 52 nan
6. 总结
- 文件操作:Linux 提供了丰富的系统调用来进行文件操作,包括打开、关闭、读取和写入。
- Makefile:用于自动化编译和运行程序,提高开发效率。
- 实践:通过编写和测试示例代码,可以更好地理解和掌握 Linux 文件操作。