stdin stderr stdout
2017-02-15 14:38
323 查看
stdin是标准输入文件,stdout是标准输出文件,stderr标准出错文件,应用在输出的重新定位上。
程序按如下方式使用这些文件:
标准输入是程序可以读取其输入的位置。缺省情况下,进程从键盘读取
stdin。
标准输出是程序写入其输出的位置。缺省情况下,进程将
stdout写到终端屏幕上。
标准错误是程序写入其错误消息的位置。缺省情况下,进程将
stderr写到终端屏幕上。
定义位置:
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
用法:
fprintf(stderr, "Can't open it!/n");
fprintf(stdout, "Can't open it!/n");
stdin -- 标准输入设备.
用法:
char s[80];
fputs(fgets(s,80,stdin);
通常,每个
Unix程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型的, 他们被连接到用户的终端(但是也有可能指向文件或是其他设备,取决于父进程选择设置了什么的重定向)输入流被称为 ``standard input''; 输出流被称为 ``standard output'';错误流被称为 ``standard error''。
这些名词 通常简写为符号,用于引用这些文件,它们是 stdin, stdout,和 stderr. 这些符号中,每一个都是 stdio(3) 中的一个宏,类型是指向 FILE的指针,可以用于类似 fprintf(3) 或 fread(3) 等函 数中。 由于 FILE 是一个对 Unix 文件描述符加以缓冲的包装,下层的文件也可以使用-始的 Unix 文件接口来存取。也就是,类 似 read(2) 和 lseek(2) 的函数。与流stdin, stdout, 和 stderr 关联的整数形式的文件描述符分别是
0,1 还有2。
预 处理器符号 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO分别以它们为值,定义在 <unistd.h> 中。 注意混合使用 FILE 和-始的文件描述符可能带来不可预料的结果,一般应当避免。 由于符号 stdin, stdout, 和 stderr被指定为宏,为它们赋值将导致不可移植。
利用库函数 freopen(3),标准流可以用 来指向不同的文件。引进这个函数专门用来为 stdin, stdout, 和stderr 重新赋值。标准流在调用 exit(3) 和程序正常 中止时被关闭。 错误流 stderr 是非缓冲的。输出流 stdout是行缓冲的,如果它指向一个终端。不完全的行只有在调用 fflush(3) 或 exit(3),或者打印了新行符之后才会显示。这样可能带来无法预料的结果,尤其是调试输出时。标准流(或任何其他流) 的缓冲模式可以用函数 setbuf(3) 或 setVBuf(3)来切换。注意当
stdin 与一个终端关联时,也许终端驱动中存在输入 缓冲,与stdio 缓冲完全无关。(确实如此,一般的终端输入在内核中是行缓冲的。)内核对输入的控制可以通过对 tcsetattr(3) 的调用来修改,参见 stty(1), 和termios(3) 。
程序按如下方式使用这些文件:
标准输入是程序可以读取其输入的位置。缺省情况下,进程从键盘读取
stdin。
标准输出是程序写入其输出的位置。缺省情况下,进程将
stdout写到终端屏幕上。
标准错误是程序写入其错误消息的位置。缺省情况下,进程将
stderr写到终端屏幕上。
定义位置:
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
用法:
fprintf(stderr, "Can't open it!/n");
fprintf(stdout, "Can't open it!/n");
stdin -- 标准输入设备.
用法:
char s[80];
fputs(fgets(s,80,stdin);
通常,每个
Unix程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型的, 他们被连接到用户的终端(但是也有可能指向文件或是其他设备,取决于父进程选择设置了什么的重定向)输入流被称为 ``standard input''; 输出流被称为 ``standard output'';错误流被称为 ``standard error''。
这些名词 通常简写为符号,用于引用这些文件,它们是 stdin, stdout,和 stderr. 这些符号中,每一个都是 stdio(3) 中的一个宏,类型是指向 FILE的指针,可以用于类似 fprintf(3) 或 fread(3) 等函 数中。 由于 FILE 是一个对 Unix 文件描述符加以缓冲的包装,下层的文件也可以使用-始的 Unix 文件接口来存取。也就是,类 似 read(2) 和 lseek(2) 的函数。与流stdin, stdout, 和 stderr 关联的整数形式的文件描述符分别是
0,1 还有2。
预 处理器符号 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO分别以它们为值,定义在 <unistd.h> 中。 注意混合使用 FILE 和-始的文件描述符可能带来不可预料的结果,一般应当避免。 由于符号 stdin, stdout, 和 stderr被指定为宏,为它们赋值将导致不可移植。
利用库函数 freopen(3),标准流可以用 来指向不同的文件。引进这个函数专门用来为 stdin, stdout, 和stderr 重新赋值。标准流在调用 exit(3) 和程序正常 中止时被关闭。 错误流 stderr 是非缓冲的。输出流 stdout是行缓冲的,如果它指向一个终端。不完全的行只有在调用 fflush(3) 或 exit(3),或者打印了新行符之后才会显示。这样可能带来无法预料的结果,尤其是调试输出时。标准流(或任何其他流) 的缓冲模式可以用函数 setbuf(3) 或 setVBuf(3)来切换。注意当
stdin 与一个终端关联时,也许终端驱动中存在输入 缓冲,与stdio 缓冲完全无关。(确实如此,一般的终端输入在内核中是行缓冲的。)内核对输入的控制可以通过对 tcsetattr(3) 的调用来修改,参见 stty(1), 和termios(3) 。
相关文章推荐
- 数据重定向(stdin,stdout,stderr)
- Windows管道(Pipe)重定向stdout,stderr,stdin
- Three Standard Streams: stdin, stdout, stderr
- linux中stdout,stdin,stderr意义
- daemon守护进程中将stdin,stdout,stderr重定向到/dev/null的问题
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- stdin,stdout,stderr
- Linux守护进程的stdout, stdin, stderr
- Linux 下 stdin stdout stderr 的由来
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
- stdin, stdout, stderr 详解
- linux中stdout,stdin,stderr意义
- 详解stdin,stdout,stderr
- stdout stdin stderr
- linux下stdin和stdout以及stderr
- STDOUT_FILENO STDIN_FILENO STDERR_FILENO 和stdin stdout stderr
- stdin、stdout、stderr
- (转)Windows管道(Pipe)重定向stdout,stderr,stdin
- linux下的stdout,stdin,stderr
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)