文件系统编程——标准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库中的内容,在以后的学习中相信文件编程的内容会起到很大的作用。
- 文件系统编程——标准I/O库
- UNIX环境高级编程——标准I/O库
- UNIX环境高级编程——标准I/O库
- Linux 文件系统编程之系统调用和标准I/O库
- Linux 系统应用编程——标准I/O
- Linux 系统应用编程——标准I/O
- Linux 系统应用编程——标准I/O
- Unix/Linux编程-标准I/O库
- UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数
- UNIX环境编程学习笔记—文件I/O之标准I/O流
- UNIX环境高级编程——标准I/O库缓冲区和内核缓冲区的区别
- UNIX环境高级编程——标准I/O库缓冲区和内核缓冲区的区别
- unix环境高级编程复习)——标准I/O库(1)
- UNIX环境高级编程——第五章-标准I/O库
- 标准I/O操作编程
- 标准I/O文件编程
- 标准I/O库
- 标准I/O库
- torch中如何找出矩阵中元素之大于某个阈值的所有元素的下标?torch.find() ?
- hadoop基础概述
- 机器学习汇总
- # 配置CentOS7本地yum源和国内网络yum源
- AndroidStudio-cannot resolve symbol 'Activity'
- 文件系统编程——标准I/O库
- 17. Letter Combinations of a Phone Number
- HDU6092(83/600)
- HDU-1087-Super Jumping! Jumping! Jumping!
- Lua脚本编程
- 我们日常所用得方法解析
- Struts2中Action与Servlet的联系与区别
- VisualStudio工程设置及常见问题
- java设计模式--DAO模式