标准io; stdio.h
1,标准io的概念 1975 Dennis r IO库,C语言的标准,ANSI c
一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源
2,文件的概念,作用
linux中一切都是文件。文件用来存储数据(数据,指令);
3,linux中文件的类型,
7种,d ,-,l,p管道,s, ,c,b 用命令演示 link pip socket
hello oellh,,512
io的分类
标准io,
stdio.h
Dennis Ritchie
标准IO:
ANSI C 设计的一组用文件IO 封装的操作库函数
头文件: stdio.h ==》标准输入输出头文件
/usr/include/stdio.h
<> 是系统库函数,默认路径在/usr/include/
eg : ====》stdio.h ===>stdio.c==>libc.so ==>/usr/lib so 动态库 user resource
"" 是用户自定义函数,默认是当前路径
eg : ===>xxx.h ===>xxx.c
man man ==>所有man的帮助
man xxx == man 1 xxx ===>查看当前xxx命令
man 2 xxx ===>查看xxx对应的系统调用函数
man 3 xxx ===》查看xxx对应的标准库函数
:如果没有命令则直接man xxx 会显示其函数\n
如果没有系统调用则显示系统库函数帮助
流: FILE*
struct FILE
{
}
数据从文件当中流入和流出所体现出来的字节
流叫做流
流的分类:
二进制流: 2001 \n
二进制数据的流
文本流:
ASCII码数据的流 \n \t
FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
流对象 ===》头 《===数据====》尾
stdin FILE* scanf ();
stdout printf();
stderr
1,打开文件 FILE
2,io操作,,读写操作
3,关闭文件
fopen打开文件函数
1, fopen,
2, 读写操作相关,
fgetc/fputc,,,,,,一个字符,
fgetc(int c ,FILE*strem);
fgets/fputs....,,一次一行。。。
fread/fwrite....自定义大小,,二进制
struct person
{
char name[10];
int age;
char phone[15];
};
person son[10];
3,fclose..
读取写入函数
C 语言中,fgetc
、fgets
、fputc
和 fputs
函数用于文件的字符和字符串输入输出。下面是对这些函数的详细对比:
fgetc
和 fgets
对比
fgetc
函数
fgetc
用于从文件中读取一个字符。其函数原型如下:
int fgetc(FILE *stream);
参数:
stream
:文件流指针,指向一个已经打开的文件。
返回值:
- 成功时,返回读取的字符(以
int
型表示)。 - 到达文件末尾时,返回
EOF
。 - 读取错误时,也返回
EOF
。
使用示例:
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("fopen"); return 1; } int ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); // 打印字符到标准输出 } fclose(file); return 0; }
fgets
函数
fgets
用于从文件中读取一行文本。其函数原型如下:
char *fgets(char *str, int n, FILE *stream);
参数:
str
:指向字符数组的指针,用于存储读取的字符串。n
:要读取的最大字符数(包括结尾的空字符\0
)。stream
:文件流指针,指向一个已经打开的文件。
返回值:
- 成功时,返回
str
。 - 到达文件末尾或发生读取错误时,返回
NULL
。
使用示例:
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("fopen"); return 1; } char buffer[256]; while (fgets(buffer, sizeof(buffer), file) != NULL) { printf("%s", buffer); // 打印读取的行 } fclose(file); return 0; }
fputc
和 fputs
对比
fputc
函数
fputc
用于将一个字符写入文件。其函数原型如下:
int fputc(int c, FILE *stream);
参数:
c
:要写入的字符(以int
型表示)。stream
:文件流指针,指向一个已经打开的文件。
返回值:
- 成功时,返回写入的字符。
- 失败时,返回
EOF
。
使用示例:
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("fopen"); return 1; } fputc('A', file); // 写入单个字符 fputc('\n', file); // 写入换行符 fclose(file); return 0; }
fputs
函数
fputs
用于将一个字符串写入文件。其函数原型如下:
int fputs(const char *str, FILE *stream);
参数:
str
:要写入的字符串。stream
:文件流指针,指向一个已经打开的文件。
返回值:
- 成功时,返回一个非负值。
- 失败时,返回
EOF
。
使用示例:
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("fopen"); return 1; } fputs("Hello, World!\n", file); // 写入字符串 fputs("This is a new line.\n", file); fclose(file); return 0; }
总结
fgetc
逐字符读取文件,适合处理字符流或逐字符分析。fgets
逐行读取文件,适合处理文本行或读取固定长度的字符串。fputc
逐字符写入文件,适合写入单个字符或生成字符流。fputs
逐字符串写入文件,适合写入文本行或生成字符串。
这些函数各有其适用的场景,选择合适的函数可以使文件操作更加高效和简便。
fgets fputs 遇到0a(\n)、00('\0'),就停止读和写。
-t改成 -c 以符号呈现
用户,组内用户,其他人
硬链接:多个文件名关联一个文件内容(几个文件则上面的1就换成几)