UNIX下STDIN_FILENO与stdin区别
2012-06-07 11:02
162 查看
标准输入 (stdin)
标准输入是指数据(通常是文件)走向程序。程序要求数据传输使用读的运算。并非所有程序都要求输入。如dir或ls程序(显示一个目录中的文件名)运行时不用任何输入。
除非重导向,输入预期由 键盘取得。
标准输入的文件描述子为 0 (零)。POSIX <unistd.h> 定义是 STDIN_FILENO;相对应的 <stdio.h> 变量为 FILE*
stdin ;类似地, <iostream> 变量为 std::cin 。
标准输入是指程序写输出数据的流。程序要求数据传输使用写的运算。并非所有程序都要求输出。如mv或ren程序在成功完成时是沉默的。
除非重导向,输入为 终端。
标准输出的文件描述子为 1 (一)。POSIX <unistd.h> 定义是 STDOUT_FILENO;相对应的 <stdio.h> 变量为 FILE*
stdout;类似地, <iostream> 变量为 std::cout 。
标准错误输出是另一个输出流,典型用于程序输出错误消息或诊断。它是独立于标准输出的流且可以分别导向。通常目的地为终端。标准错误输出是另一输出流,用于输出错误消息或诊断。它独立于标准输出,且可以分别被重导。常见的目的则为启始这个程序的终端,即使其标准输出被重导亦如此。例如:一个管线中的程序的输出被重导到下一个程序,但错误消息仍然直接流向文字终端机。
把标准输出和标准错误输出导到相同的目的,如文字终端,是可以(且正常)的。消息会以如同程序写入的顺序来出现,除非有用到缓冲。(例如,一个常见状况是,当标准错误流是未使用缓冲,但标准输出流是有使用的;在这情况下,如果标准输出的缓冲器还没满的话,较慢写到标准错误的文字可能会较早出现在终端。
标准错误输出的文件描述子为 2 ;POSIX <unistd.h> 定义为 STDERR_FILENO;相对的 <stdio.h> 变量 FILE*
stderr。C++<iostream> 标准头文件提供两个相关的变量: std::cerr 和 std::clog,前者用于无缓冲的而后者使用和其它 C++ 流相同的缓冲机制。
以上是维基百科对于标准流的解释。
原文URL:http://zh.wikipedia.org/wiki/標準串流
1、数据类型不一致
stdin等类型为 FILE *
STDIN_FILENO等类型为 int
使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头
使用STDIN_FILENO的函数有:read、write、close等
2、层次不一致
stdin等属于标准I/O,高级的输入输出函数。在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,直接调用系统调用,在<unistd.h>。
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
stdin等属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等
STDIN_FILENO等属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
对于stdin等可以使用fileno()函数(用来取得参数stream指定的文件流所使用的文件描述符)来取得该文件流对应的文件描述符。
fileno(stdin)
= STDIN_FILENO = 0
fileno(stdout)
= STDOUT_FILENO = 1
fileno(stderr)
= STDERR_FILENO = 2
标准输入是指数据(通常是文件)走向程序。程序要求数据传输使用读的运算。并非所有程序都要求输入。如dir或ls程序(显示一个目录中的文件名)运行时不用任何输入。
除非重导向,输入预期由 键盘取得。
标准输入的文件描述子为 0 (零)。POSIX <unistd.h> 定义是 STDIN_FILENO;相对应的 <stdio.h> 变量为 FILE*
stdin ;类似地, <iostream> 变量为 std::cin 。
标准输出 (stdout)
标准输入是指程序写输出数据的流。程序要求数据传输使用写的运算。并非所有程序都要求输出。如mv或ren程序在成功完成时是沉默的。除非重导向,输入为 终端。
标准输出的文件描述子为 1 (一)。POSIX <unistd.h> 定义是 STDOUT_FILENO;相对应的 <stdio.h> 变量为 FILE*
stdout;类似地, <iostream> 变量为 std::cout 。
标准错误输出 (stderr)
标准错误输出是另一个输出流,典型用于程序输出错误消息或诊断。它是独立于标准输出的流且可以分别导向。通常目的地为终端。标准错误输出是另一输出流,用于输出错误消息或诊断。它独立于标准输出,且可以分别被重导。常见的目的则为启始这个程序的终端,即使其标准输出被重导亦如此。例如:一个管线中的程序的输出被重导到下一个程序,但错误消息仍然直接流向文字终端机。把标准输出和标准错误输出导到相同的目的,如文字终端,是可以(且正常)的。消息会以如同程序写入的顺序来出现,除非有用到缓冲。(例如,一个常见状况是,当标准错误流是未使用缓冲,但标准输出流是有使用的;在这情况下,如果标准输出的缓冲器还没满的话,较慢写到标准错误的文字可能会较早出现在终端。
标准错误输出的文件描述子为 2 ;POSIX <unistd.h> 定义为 STDERR_FILENO;相对的 <stdio.h> 变量 FILE*
stderr。C++<iostream> 标准头文件提供两个相关的变量: std::cerr 和 std::clog,前者用于无缓冲的而后者使用和其它 C++ 流相同的缓冲机制。
以上是维基百科对于标准流的解释。
原文URL:http://zh.wikipedia.org/wiki/標準串流
主要区别:
1、数据类型不一致stdin等类型为 FILE *
STDIN_FILENO等类型为 int
使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头
使用STDIN_FILENO的函数有:read、write、close等
2、层次不一致
stdin等属于标准I/O,高级的输入输出函数。在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,直接调用系统调用,在<unistd.h>。
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
stdin等属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等
STDIN_FILENO等属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
关系:
对于stdin等可以使用fileno()函数(用来取得参数stream指定的文件流所使用的文件描述符)来取得该文件流对应的文件描述符。fileno(stdin)
= STDIN_FILENO = 0
fileno(stdout)
= STDOUT_FILENO = 1
fileno(stderr)
= STDERR_FILENO = 2
相关文章推荐
- UNIX环境编程笔记之STDIN_FILENO
- UNIX下STDIN_FILENO与stdin区别
- STDIN_FILENO与stdin区别
- UNIX下STDIN_FILENO与stdin…
- STDIN_FILENO的作用及与stdin 的区别
- stdin,stdout,stderr与STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO的区别
- 系统API接口库中的STDIN_FILENO介绍以及与stdin的区分
- STDIN_FILENO和stdin的区别
- STDIN_FILENO的作用与stdin的区别!!!
- linux STDIN_FILENO 和STDIN 的区别
- 【转】Unix/Linux下的stdout,stdin同stderr
- STDIN_FILENO的作用及与stdin 的区别
- 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
- STDIN_FILENO的作用及与stdin 的区别
- 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- linux 关于while((n=read(STDIN_FILENO,buf,BUFFSIZE)) > 0)
- STDIN_FILENO vs stdin
- 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习 http://www.cnblogs.com/hoys/archive/2011/05/11/2043044