open函数:打开一个文件
参数:
pathname:文件的路径及文件名。
flags:open函数的行为标志。
mode:文件权限(可读、可写、可执行)的设置。
返回值:
成功返回打开的文件描述符。
失败返回-1,可以利用perror去查看原因
close函数:关闭一个文件
#include
int close(int fd);
参数:
fd是调用open打开文件返回的文件描述符
返回值:
成功返回0。
失败返回-1,可以利用perror去查看原因
write函数:把指定数目的数据写到文件
#include
ssize_t write(int fd, const void addr,
size_t count);
参数:
fd:文件描述符。
addr:数据首地址。
count:写入数据的字节个数。
返回值:
成功返回实际写入数据的字节个数。
失败返回-1,可以利用perror去查看原因。
read函数:把指定数目的数据读到内存
#include
ssize_t read(int fd, void
addr, size_t count);
参数:
fd:文件描述符。
addr:内存首地址。
count:读取的字节个数。
返回值:
成功返回实际读取到的字节个数。
失败返回-1,可以利用perror去查看原因。

库函数由两类函数组成

不需要调用系统调用
不需要切换到内核空间即可完成函数全部功能,
并且将结果反馈给应用程序,如strcpy、bzero等字
符串操作函数。
需要调用系统调用
需要切换到内核空间,这类函数通过封装系统调
用去实现相应功能,如printf、fread等

编程过程中尽量使用标准库函数

由ANSI标准提供的标准IO库函数
几乎被所有的操作系统支持,如winsdows下编
写的程序几乎不用做任何修改就可以在linux下重
新编译运行。
如:fopen、fread、fwrite、fclose。
以系统调用的方式给用户提供函数接口(遵循POSIX
标准)
例如linux操作系统提供的文件IO接口。
如:open、close、read、write、ioctl。
系统调用与操作系统直接相关,直接使用系统
调用编写的程序的可移植性差
image.png
关闭流
头文件:#include
定义函数:
int fclose(FILE *stream);
函数说明:
fclose用来关闭fopen打开的文件。此动作会让缓
冲区的数据写入文件中,并释放系统所提供的文件资
源。
返回值:
成功返回0;失败返回EOF,并把错误代码存到
errno中
读、写流
打开了流后,对其进行读写操作的方法:
每次一个字符
每次一行字符
每次一个数据块