在unix系統調用中,標準輸入描述字用stdin,標準輸出用stdout,標準出錯用stderr表示,但在一些調用函數,引用了STDIN_FILENO表示標準輸入才,同樣,標準出入用STDOUT_FILENO,標準出錯用STDERR_FILENO.
他們的區別:
stdin等是FILE *類型,屬于標準I/O,在。
STDIN_FILENO等是文件描述符,是非負整數,一般定義為0, 1, 2,屬于沒有buffer的I/O,直接調用系統調用,在。
下面一個例子是對STDOUT_FIFENO 和STDIN_FILENO的應用:
#include
#define SIZE 100
int main(void)
{
int n;
char buf[SIZE];
while(n=read(STDIN_FILENO,buf,SIZE))?? //讀取標準輸入到buf中,返回讀取字節數。
{
if(n!=write(STDOUT_FILENO,buf,n)) 把buf 寫到標準輸出中
perror("write error");
}
if(n<0) perror("read error");
return 0;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果按照常規的使用方法:
fan@fan:~/arm$ gcc -o app stdout.c
fan@fan:~/arm$ ./app
fdfe
fdfe
fefefef
fefefef
//輸入一行,馬上輸出一行,也就是按照原樣輸出
===========================================================================
使用重定向來運行
fan@fan:~/arm$ ./app> data
fefe
fdadfdf
adfdfef
//輸入的字符串并不是輸出到終端,而是輸出到data文件中。
==========================================================================
fan@fan:~/arm$ ./app data
fan@fan:~/arm$
//這一句相當于把stdout.c復制到data中去
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
STDOUT_FILENO和STDIN_FILENO在默認的情況下是終端,
使用ctrl+D來輸入文件結束符