1. 程式人生 > 其它 >stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO

stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO

stdin,stdout 等型別為 FILE *
STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 等型別為 int
使用 FILE * 的函式主要有:fopen、fread、fwrite、fclose等,基本上都以 f 開頭。
使用 STDIN_FILENO 等的函式有:open、read、write、close等。

stdin 等屬於標準 I/O,高階的輸入輸出函式,定義在 <stdio.h>
STDIN_FILENO 等是檔案描述符,是非負整數,一般定義為0, 1, 2,直接呼叫系統呼叫,定義在 <unistd.h>

fileno()

函式可以用來取得 stream 指定的檔案流所使用的檔案描述符:

#include <stdio.h>
#include <unistd.h>

int main()
{
printf("%d \n",fileno(stdin)); //0
printf("%d \n",fileno(stdout)); //1
printf("%d \n",fileno(stderr)); //2

<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;

}

接受標準輸入,輸出到標準輸出:

#include <stdio.h>
#include <unistd.h>

#define SIZE 100

int main()
{
int n;
char buf[SIZE];

while(n = read(STDIN_FILENO,buf,SIZE))
{
if(n != write(STDOUT_FILENO,buf,n))
perror("write error");
}

if(n < 0)
perror("read error");

return 0;
}

stdin,stdout 等型別為 FILE *
STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO

等型別為 int
使用 FILE * 的函式主要有:fopen、fread、fwrite、fclose等,基本上都以 f 開頭。
使用 STDIN_FILENO 等的函式有:open、read、write、close等。

stdin 等屬於標準 I/O,高階的輸入輸出函式,定義在 <stdio.h>
STDIN_FILENO 等是檔案描述符,是非負整數,一般定義為0, 1, 2,直接呼叫系統呼叫,定義在 <unistd.h>

fileno() 函式可以用來取得 stream 指定的檔案流所使用的檔案描述符:

#include <stdio.h>
#include <unistd.h>

int main()
{
printf("%d \n",fileno(stdin)); //0
printf("%d \n",fileno(stdout)); //1
printf("%d \n",fileno(stderr)); //2

<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;

}

接受標準輸入,輸出到標準輸出:

#include <stdio.h>
#include <unistd.h>

#define SIZE 100

int main()
{
int n;
char buf[SIZE];

while(n = read(STDIN_FILENO,buf,SIZE))
{
if(n != write(STDOUT_FILENO,buf,n))
perror("write error");
}

if(n < 0)
perror("read error");

return 0;
}