标准IO和文件IO的区别

标准IO和文件IO的区别,第1张

先来了解下什么是标准IO以及文件IO。

标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的毁简可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。

(1)全缓存:当填满标准IO缓存后才进行实际的IO *** 作。 (2)行缓存:当输入或输出中遇到新行符时,标准IO库执行IO *** 作。 (3)不带缓存:stderr就是了。

文件IO:文件IO称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O—— *** 作系统提供的基本IO服务,与os绑定念余首,特定于linix或unix平台。

2区别

首先:两者一个显著的不同点在于,标准I/O默认采用了缓冲机制,比如调用fopen函数,不仅打开一个文件,而且建立了一个缓冲区(读写模式下将建立两个缓冲区),还创建了一个包含文件和缓冲区相关数据的数据结构。低级I/O一般没有采用缓冲,需要自己创建缓冲区,不过其实在linix或unix系统中,都是有使用称为内核缓冲的技术用于提高效率,读写调用是在内核缓冲区和进程缓冲区之间进行的数据复制。

其次从 *** 作的设备上来区分,文件I/O主要针对文件 *** 作仔数,读写硬盘等,它 *** 作的是文件描述符,标准I/O针对的是控制台,打印输出到屏幕等,它 *** 作的是字符流。对于不同设备得特性不一样,必须有不同api访问才最高效。

标准IO库是于1975年左尘首右编写完成的,用于处理流和文件的一个库.

标准IO库可以在很多 *** 作系统下移植

经过30多年,标准IO库没有发生什么重大变化

流和FILE对象

基本IO是针对文件描述符的,而标准IO是基于流的.当通过标准IO打开或者创建文件的时候,系统使用一个流和文件相关联.在Unix环境中,标准IO库是建立在基本IO基础之上的

标准IO库中的流以FILE *的形式表现,各种标准IO库函数使用

为了增加对国际化的支持,最新的标准IO库增加了对宽字符的支持

标准输入,标准输出和标准错误

按照惯例,Unix进程使用三个默认的文件描述符,分别是STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO

标准IO库中预定义了三个流stdin, stdout, stderr,可以自动被进程使用,分别是标准输入,标准输出和标准错误.它们引用的文件和STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO指向的文件相同

缓冲

标准IO库通过调用宴兄搭read/write系统调用来实现真正的IO

为了减少调用read/write的次数,标准IO库提供了缓冲 注意,这个缓冲是在用户态的

有3种类型的缓冲

全缓冲

行缓冲

不缓冲

可以通过setbuf函数对指定的流设置缓冲类型

ISO C规定

当且仅当stdin/stdout不涉及交互设备时,它们才是全缓冲

stderr决不会是全缓冲的

默认的

stderr是不带缓冲的

其他流,如果涉及到终端设备,则是行缓冲的,否则是全缓冲的

和缓冲相关的几个函数

设置流的缓冲

void setbuf(FILE *fp, char *buf)

int setvbuf(FILE *fp, char *buf, int mode, size_t size)

强制刷新流缓冲

int fflush(FILE *fp)

打开流

FILE *fopen(char *pathname, char *type)

FILE *freopen(char *pathname, char *type, FILE *fp)

FILE *fdopen(int filedes, char *type)

打开方式

r 为读而打晌拿开

w 把文件截短为0长,为写而创建

a 为在文件末尾写而打开,或为写创建

r+ 为读和写而打开

w+ 把文件截短为0长,为读和写而创建

a+ 为在文件末尾写而打开或创建

还可以加上"b",表示以二进制方式打开,但Unix内核并不区分字符文件和二进制文件,这个标志无意义

关闭流

int fclose(FILE *fp)

读流

int fgetc(FILE *fp)

int getchar()//= fgetc(stdin)

int ferror(FILE *fp)

int feof(FILE *fp)

void clearerr(FILE *fp)

ungetc(int c, FILE *fp)

写流

int fputc(int c, FILE *fp)

int putchar(c)// fputc(c, stdout)

每次一行IO

输入一行

char *fgets(char *buf, int n, FILE *fp)

char *gets(char *buf)

输出一行

int fputs(char *str, FILE *fp)

int puts(char *str)

二进制IO

size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp)

size_t fwrite(void *ptr, size_t size, size_t nobj, FILE *fp)

定位流

返回当前文件位置

long ftell(FILE *fp)

定位到指定位置

int fseek(FILE *fp, long offset, int whence)

void rewind(FILE *fp)

格式化输出

int printf(char *format, ...)

int fprintf(FILE *fp, char *format, ...)

int sprintf(char *buf, char *format, ...)

int snprintf(char *buf, size_t n, char *format, ...)

格式字符串

%[flags][width][precision][length]type

flags: 对齐,填0等控制

width: 输出宽度

precision: 精度

length: 长度修饰

type: 转换类型

几个变体

int vprintf(char *format, va_list arg)

int vfprintf(FILE *fp, char *format, va_list arg)

int sprintf(char *buf, char *format, va_list arg)

int snprintf(char *buf, size_t n, char *format, va_list arg)

格式化输入

int scanf(char *format, ...)

int fscanf(FILE *fp, char *format, ...)

int sscanf(char *buf, char *format, ...)

返回值: 输入的项数,如果到达文件末尾则返回EOF

临时文件

产生一个临时文件名

char *tmpnam(char *ptr)

产生并打开一个临时文件

FILE *tmpfile(void)

使用临时文件

调用tmpnam产生一个路径名

用该路径名创建一个文件

立即unlink它

使用临时文件

关闭临时文件,系统自动删除它

1、老侍希腊女神爱莪的名字(io),她是主神宙斯的情人,后为宙斯之妻 Hera 施法变为母牛。

2、IO端口,I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信羡含州息。I/O地址绝对不能重复,如果两个设备的I/O地址有冲突,系统硬件就不能正常工作。

扩展资料:

在POSIX兼容的系统上,例如Linux系统,I/O *** 作可以有多种方式,比如DIO(Direct I/O),AIO(Asynchronous,I/O 异步I/O),Memory-Mapped I/O(内存映设I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。

输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换;实现联动控制系统的弱电线路与被控设备的强电线路之间的转接、隔离,以防止强电兄蔽窜入系统,保障系统的安全。

与专线控制盘连接,用于控制重要消防设备(如消防泵、喷淋泵、风机等),一只模块可控制一台大型消防设备的启、停控制。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12252289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存