C语言I/O学习笔记(1)stdin,stdout和stderr以及重定向

本文介绍了C程序的标准输入输出及错误输出,并解释了如何利用Unix、Linux和DOS下的重定向功能改变这些流的来源和目标。文章还讨论了重定向的一些限制。

C程序自动打开3个文件,标准输入,标准输出和标准错误输出。默认情况下分别指向键盘,显示器,显示器。

这里的文件指的是指向FILE的指针。FILE是stdio.h中定义的一种派生类型。FILE类型指针,指向一个关于文件信息的数据包,其中包括文件I/O使用的缓冲区的信息。

stdin,stdout,stderr都是FILE*类型的对象,它们都是常量。分别指向键盘,显示器,显示器。也就是c程序启动时操作系统流环境负责打开的3个文件(标准输入,标准输出和标准错误输出)。

Unix,Linux,DOS可以重定向输入和输出。通俗来说,输入重定向让我们可以使用文件代替键盘作为输入,输出重定向可以让我们用文件代替显示器作为输出。

文件编译之后,有一个执行文件xxx.exe(DOS下),现在有一个text.txt文件,通过命令:xxxx < text 把xxxx的输入定向到text文件,也就是从text文件中读取数据作为xxxx的输入。

< 符号是Unix,Linux,DOS的重定向运算符,该运算符把stdin流和text文件关联起来,将该文件的内容导入xxxx程序,xxxx程序只负责从流中提取数据,而不关心数据是从何而来。

(注:Unix,Linux,DOS下<两侧的空格是可选的)

与输入重定向类似,< 可进行输出重定向。

输出重定向可和输入重定向同时使用,重定向运算符的顺序无关紧要。比如另有文件text1.txt, 命令:xxxx < text >text1

 

总结,重定向遵循的规则如下:

1.重定向运算符讲一个可执行程序与一个数据文件连接起来。它不能连接两个可执行程序,也不能连接两个文件。

2.使用重定向运算符时,输入只能定向到一个文件,即输入不能来自一个以上的文件。输出同理。

3.不要把一个程序的输入和输出定向到一个文件,如 xxxx < text >text,>text 使原始的text文件在用于输入之前被截断为零。

 

### 回答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是非常重要的输入输出流,它们为程序的输入输出提供了标准的接口便捷的操作方式,并在调试程序或排除错误时提供了有用的信息。因此,程序员应当深入了解它们的特性用法,以便高效地进行开发调试工作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值