文件系统编程——标准I/O库

来源:互联网 发布:韩子高网络剧演员表 编辑:程序博客网 时间:2024/06/05 07:51

printf函数向标准输出写入多个字符,所写入的字符被放在一个用户态的缓冲区中,直到碰到一个换行符,系统才调用write函数将缓冲区中的数据写入标准输出,也就是说,在换行符之前写入的字符并不会立即出现在控制台屏幕上。
系统调用要请求内核的服务,会引发CPU模式的切换,期间会有大量的堆栈数据保存操作,开销比较大。如果频繁地进行系统调用,会降低应用程序的运行效率。有了缓冲机制以后,多个读写操作可以合并为一次系统调用,减少了系统调用的次数,将大大提高程序的运行效率。

标准I/O函数并不直接操作文件描述符,而是使用文件指针。文件指针和文件描述符是一一对应的关系,这种对应关系由标准I/O库自己内部维护。文件指针指向的数据类型为FILE型,但应用程序无须关心它的具体内容。
在标准I/O中,一个打开的文件称为流(stream),流可以用于读(输入流)、写(输出流)或读写(输入输出流)。每个进程在启动后就会打开三个流,分别对应:stdin(标准输入流)、stdout(标准输出流)以及stderr(标准错误输出流)。

 fopen用于打开一个标准I/O流#include <stdio.h>FILE *fopen(const char *path, const char *mode);

参数mode:
r”或”rb”:以只读方式打开。
“w”或”wb”:以只写方式打开,并把文件长度截短为零。
“a”或”ab”:以写方式打开,新内容追加在文件尾。
“r+”或”rb+”或”r+b”:以更新方式打开(读和写)。
“w+”或”wb+”或”w+b”:以更新方式打开,并把文件长度截短为零。
“a+”或”ab+”或”a+b”:以更新方式打开,新内容追加在文件尾

fread()用于从一个文件流里读取数据。#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
#include <stdio.h>size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
 fclose()函数用于关闭指定的文件流。#include <stdio.h>int fclose(FILE *fp);

出了这几个主要的操作,还有一些其他的操作

fflush()用于把文件流里所有未写出的数据立即写出。#include <stdio.h>int fflush(FILE *stream);  fseek()用于在文件流里为下一次读写操作指定位置。#include <stdio.h>int fseek(FILE *stream, long offset, int whence); 
fgetc()从文件流里取出下一个字节并把它作为一个字符返回。当它到达文件结尾或出现错误时,返回EOF。getc()和fgetc()一样,但它有可能被实现为一个宏。getchar()相当于getc(stdin)。#include <stdio.h>int fgetc(FILE *stream);int getc(FILE *stream);int getchar(void);
fputc()把一个字符写到一个输出文件流中,它返回写入的值,如果失败,则返回EOF。类似fgetc()和getc(),putc()的作用也相当于fputc(),但它可能被实现为一个宏。putchar()相当于putc(c, stdout),它把单个字符写到标准输出。#include <stdio.h>int fputc(int c, FILE *stream);int putc(int c, FILE *stream);int putchar(int c);

关于文件的操作大概也就这些了。在我们进一步的学习之后,用的更多的还是标准I/O库中的内容,在以后的学习中相信文件编程的内容会起到很大的作用。

原创粉丝点击