一、库函数和系统调用之间的关系和区别(文件操作函数说明)
fopen(3)
FILE *fopen(const char *path, const char *mode);
当使用fopen(3)打开文件的时候,发生了什么?
1)首先分配了一块内存空间,用于文件内容的缓冲
2)然后调用open(2)
fputc(3)
int fputc(int c, FILE *stream);
首先将数据放入fopen(3)开辟的那块内存空间里:
1)如果内存空间不满,不会立即写入到文件,当清理缓存的时候或者或者缓存满的时候,调用"write"(2)将缓存里的内容写到文件。
2)如果内存空间满的时候,调用write(2)将缓存里的数据写入到文件,然后将fputc的内容写到缓存里。
fgetc(3)
int fgetc(FILE *stream);
调用fgetc(fp)的时候,首先到fp指向的内存空间里去找一个字符:
1)如果空间里有字符,立即返回。
2)如果没有字符,调用"read(fp->_fileno, buf, len)",buf指向了fp的内存空间。这个
fopen(3)
FILE *fopen(const char *path, const char *mode);
当使用fopen(3)打开文件的时候,发生了什么?
1)首先分配了一块内存空间,用于文件内容的缓冲
2)然后调用open(2)
fputc(3)
int fputc(int c, FILE *stream);
首先将数据放入fopen(3)开辟的那块内存空间里:
1)如果内存空间不满,不会立即写入到文件,当清理缓存的时候或者或者缓存满的时候,调用"write"(2)将缓存里的内容写到文件。
2)如果内存空间满的时候,调用write(2)将缓存里的数据写入到文件,然后将fputc的内容写到缓存里。
fgetc(3)
int fgetc(FILE *stream);
调用fgetc(fp)的时候,首先到fp指向的内存空间里去找一个字符:
1)如果空间里有字符,立即返回。
2)如果没有字符,调用"read(fp->_fileno, buf, len)",buf指向了fp的内存空间。这个