C标准I/O库函数
- 1、C标准I/O库函数
-
- 1.1、打开/写入/读取/关闭文件
- 1.2、读取文件数据
-
- 1.2.1、fgetc
- 1.2.2、fgets
- 1.2.3、fscanf
- 1.3、标准输入/输出/错误
- 2、系统调用
-
- 2.1、常用的系统调用
- 2.2、综合小demo
- 3、文件描述符
-
- 3.1、定义
- 3.2、`文件描述符`关联的数据结构
-
- 3.2.1、struct file
- 3.2.2、struct path
- 3.2.3、struct inode
- 3.3、`文件描述符表`关联的数据结构
-
- 3.3.1、打开的文件表数据结构
- 3.3.2、打开文件描述符表
- 3.3.3、fd_array和fd
- 3.3.4、文件描述符和fd或fd_array的关系
- 3.4、文件描述符引用图解
1、C标准I/O库函数
1.1、打开/写入/读取/关闭文件
fopen/fputc/fputs/fprintf/fclose/
vim fopen_test.c
===================================
#include <stdio.h>
int main() {
/* 打开文件
char *__restrict __filename: 字符串表示要打开文件的路径和名称
char *__restrict __modes: 字符串表示访问模式
(1)"r": 只读模式 没有文件打开失败
(2)"w": 只写模式 存在文件写入会清空文件,不存在文件则创建新文件
(3)"a": 只追加写模式 不会覆盖原有内容 新内容写到末尾,如果文件不存在则创建
(4)"r+": 读写模式 文件必须存在 写入是从头一个一个覆盖
(5)"w+": 读写模式 可读取,写入同样会清空文件内容,不存在则创建新文件
(6)"a+": 读写追加模式 可读取,写入从文件末尾开始,如果文件不存在则创建
return: FILE * 结构体指针 表示一个文件
FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
*/
char *filename = "io.txt";
FILE *ioFile = fopen(filename, "a+");
if (ioFile == NULL) {
printf("FAILED,a+不能打开不存在的文件\n");
} else {
printf("SUCCESS,a+能打开不存在的文件\n");
}
/*
写入文件一个字符
int __c: 写入的char按照AICII值写入 可提前声明一个char
FILE *__stream: 要写入的文件,写在哪里取决于访问模式
return: 成功返回char的值 失败返回EOF
int fputc (int __c, FILE *__stream)
*/
int putcR = fputc(97, ioFile);
if (putcR == EOF) {
printf("写入字符失败\n");
} else {
printf("写入字符成功:%c\n", putcR);
}
/*
写入文件一个字符串
char *__restrict __s: 需要写入的字符串
FILE *__restrict __stream: 要写入的文件,写在哪里取决于访问模式
return: 成功返回非负整数(一般是0,1) 失败返回EOF
int fputs (const char *__restrict __s, FILE *__restrict __stream)
*/
int putsR = fputs(" love letter\n", ioFile);
if (putsR == EOF) {
printf("写入字符串失败\n");
} else {
printf("写入字符串成功:%d\n", putsR);
}
/*
FILE *__restrict __stream: 要写入的文件,写在哪里取决于访问模式
char *__restrict __fmt: 格式化字符串
...: 变长参数列表
return: 成功返回正整数(写入字符总数不包含换行符) 失败返回EOF
fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
*/
char *name = "大海";
int fprintfR = fprintf(ioFile,
"哎呀,那边窗户透出了什么光?\n那是东方,而你则是太阳!\n升起吧,骄阳,去让忌妒的月黯然失色!\n\t\t%s",
name);
if (fprintfR == EOF) {
printf("写入字符串失败");
} else {
printf("写入字符串成功:%d\n", fprintfR);
}
/*
FILE *__stream: 需要关闭的文件
return: 成功返回0 失败返回EOF(负数) 通常失败会造成系统崩溃
int fclose (FILE *__stream)
*/
int result =