c语言 stdout什么作用,C语言技巧: stdin,stdout,stderr详解

NAME

setbuf, setbuffer, setlinebuf, setvbuf - 流缓冲操作

SYNOPSIS 览

#include

void setbuf(FILE *stream, char *buf);

void setbuffer(FILE *stream, char *buf, size_t size);

void setlinebuf(FILE *stream);

int setvbuf(FILE *stream, char *buf, int mode , size_t

size);

DESCRIPTION 述

有三种类型的缓冲策略,它们是无缓冲,块缓冲和行缓冲。当输出流无缓冲时,信息在写的同时出现于目标文件或终端上;当是块缓冲时,字符被暂存,然后一起写入;当是行缓冲时,字符被暂存,直到要输出一个新行符,或者从任何与终端设备连接的流中(典型的是stdin)读取输入时才输出。函数

fflush(3)可以用来强制提前输出。(参见 fclose(3)) 通常所有文件都是块缓冲的。当文件I/O操作在文件上发生时,将调用

malloc(3)

,获得一个缓冲。如果流指向一个终端 (通常 stdout都是这样),那么它是行缓冲的。标准错误流 stderr

默认总是无缓冲的。

函数setvbuf 可以用在任何打开的流上,改变它的缓冲。参数 mode必须是下列三个宏之一:

_IONBF 无缓冲

_IOLBF 行缓冲

_IOFBF 完全缓冲

除非是无缓冲的文件,否则参数 buf 应当指向一个长度至少为size字节的缓冲;这个缓冲将取代当前的缓冲。如果参数 buf

是NULL,只有这个模式会受到影响;下次 read 或 write操作还将分配一个新的缓冲。函数

setvbuf只能在打开一个流,还未对它进行任何其他操作之前使用。

其他三个函数调用是函数setvbuf的别名,函数setbuf与使用下列语句完全等价:

setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

函数 setbuffer 与此相同,但是缓冲的长度由用户决定,而不是由默认值 BUF-SIZ 决定。函数 setlinebuf

与使用下列语句完全等价:

setvbuf(stream, (char *)NULL, _IOLBF, 0);

函数 setvbuf 成功执行时返回 0。它失败时可能返回任何值,但是当 It can return any value on

failure, but returns nonzero when

mode不正确,或者不能实现请求时,必须返回非零值。它在失败时可能设置errno。其他函数没有返回值。

函数 setbuf 和 setvbuf 遵 ANSI X3.159-1989 (``ANSI C'') 标准。

BUGS

函数 setbuffer 和 setlinebuf 无法移植到 4.2BSD 之前的 BSD 版本,在Linux 中仅在 libc

4.5.21 之后的系统中可用。在 4.2BSD 和 4.3BSD 系统中,setbuf

总是使用非最优的缓冲大小,应当避免使用它。

在stream被关闭时,必须确保buf和它指向的空间仍然存在。这通常发生在程序终止时。

例如,下列调用是非法的:

#include

int main()

{

char buf[BUFSIZ];

setbuf(stdin, buf);

printf("Hello, world!\n");

return 0;

}

### 回答1: 在C语言中,`stdin`、`stdout`和`stderr`是三个标准的I/O流。它们分别代表标准输入、标准输出和标准错误输出。 `stdin`是标准输入流,通常用于从用户或文件中读取输入。例如,使用`scanf`函数从标准输入中读取用户输入的数据。 `stdout`是标准输出流,通常用于向屏幕或文件中输出结果。例如,使用`printf`函数向标准输出流中输出字符串或数字。 `stderr`是标准错误输出流,通常用于向屏幕或文件中输出程序错误和警告信息。例如,使用`fprintf`函数向标准错误输出流中输出错误信息。 在程序中,可以使用`stdin`、`stdout`和`stderr`来进行输入输出的操作。这些标准流在大多数操作系统中都是默认开启的,因此无需显式地打开或关闭它们。 ### 回答2: C语言的标准库包含三个预定义的文件指针:stdinstdoutstderr。它们都是指向FILE结构体的指针。这三个文件指针分别表示输入流、输出流和错误流。 stdin:是标准输入流,通常关联键盘输入,它接受用户的输入数据,并传递给程序进行处理。当需要从stdin中读入数据时,可以使用常用的输入函数scanf()和getchar()等。 stdout:是标准输出流,通常关联屏幕输出,它把程序的输出结果送到显示器上。当需要向stdout中输出数据时,可以使用常用的输出函数printf()和putchar()等。 stderr:是标准错误流,通常关联屏幕输出,它用于向用户显示程序执行过程中出现的错误和警告信息。当程序出现错误时,可以通过把错误发送到stderr,让用户能够更好地理解问题。 C语言中,这三个文件指针都是预定义的,因此无需自己打开或关闭它们。在程序开始执行时,它们已经被定义为指向标准输入、标准输出和标准错误流。但是,我们还可以通过重定向的方式来改变它们的默认行为。通过使用重定向操作符(例如“<”和“>”),我们可以重定向为其他文件,这样我们就可以从文件中读取输入,把输出重定向到文件,记录错误信息等等。 总之,在C语言中使用这三个标准流非常方便和实用。无论是基本的输入输出还是处理错误,它们都是必不可少的。可以通过它们来进行交互式输入输出,记录用户输入,以及发现和解决程序中的问题。 ### 回答3: C语言stdinstdoutstderr是三个标准的输入输出流。在C语言中,这三个流都有其独特的用途和属性。 首先,stdin是标准输入流。简单来说,它是向程序输入数据的流。当程序使用scanf等函数从stdin读取数据时,就是从标准输入流中读取数据。标准输入流通常被绑定到键盘上,也就是说,当程序从stdin读取数据时,需要用户输入数据才能进行下一步操作。 其次,stdout是标准输出流。在程序中使用printf等函数输出数据时,是将数据输出到stdout流中。标准输出流通常被绑定到显示器上,也就是说,当程序将数据输出到stdout时,数据将在显示器上呈现出来。 最后,stderr是标准错误流。当程序运行出错时,通常会将错误信息输出到stderr流中。与stdout不同的是,stderr流不会被重定向到文件或其他设备上,而是始终输出到屏幕上,这样可以确保用户能够看到错误信息并尽快进行修复。 总之,C语言stdinstdoutstderr是非常重要的输入输出流,它们为程序的输入输出提供了标准的接口和便捷的操作方式,并在调试程序或排除错误时提供了有用的信息。因此,程序员应当深入了解它们的特性和用法,以便高效地进行开发和调试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值