五、库函数和系统调用的关系
以文件操作为例
fopen fclose fputc fgetc 库函数
open close read write 系统调用
FILE 是结构体类型的别名
flags fileno mode
fopen(3)首先调用open(2)打开一个文件,将open(2)的返回值记录在FILE结构体中的_fileno成员。分配一块内存,这快空间叫文件内容缓冲区然后FILE中的一些指针成员指向这快内存,最后返回FILE类型的对象。
fputc(3)调用该函数时,向文件内容缓冲区写数据,如果缓冲区没有空间接纳这个字符,调用write(2)将缓冲区的数据写入到文件中,然后再将fputc中的数据写入到缓冲区,如果缓冲有空间接纳数据,直接将数据写入到缓冲区即可
fgetc(3)调用该函数的时候,首先从缓冲区读取数据,如果缓冲区有数据就立即返回读取到的字节,如果缓冲区没有数据,就立即调用read(2),从文件中读取数据到缓冲区,然后fgetc获取数据
fclose(3)首先刷新缓冲区,将缓冲区内容写入到文件中,然后调用close(2)再关闭文件描述符,释放缓冲区
fflush(3)可以刷新缓冲区
库函数操作文件称为缓冲文件
系统调用操作文件称为非缓冲文件
库函数可以跨平台
系统调用不能跨平台
【C语言】【unix c】库函数和系统调用的关系
最新推荐文章于 2023-09-21 21:09:30 发布