1、文件描述符(file descriptor)
文件描述符(file descriptor)通常是一個小的非負整數
2、標準輸入、標準輸出、標準出錯
按慣例,每當運行一個新程序時,所有的shell都將爲其打開三個文件描述符:標準輸入(standard input)、標準輸出(standard output)和標準出錯(standard error)。
3、不用緩衝的I/O
函數open、read、write、lseek和close提供了不用緩衝的I/O,這些函數都使用文件描述符。
4、標準I/O
標準I/O函數提供一種對不用緩衝I/O函數的帶緩衝的接口。<stdio.h>中包含了所有標準I/O函數的原型。
#include <stdio.h>
#include <unistd.h>
#define BUFFSIZE 4096
int main()
{
char buf[BUFFSIZE];
int n = 0;
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
if (write(STDOUT_FILENO, buf, n) != n)
{
printf("write error\n");
}
}
if (n < 0)
{
printf("read error\n");
}
}
代碼知識:
1、STDIN_FILENO和STDOUT_FILENO定義在<unistd.h>頭文件中,它們指定了標準輸入和標準輸出的文件描述符,它們的典型值爲0和1。爲了可讀性,我們還是使用這兩個名字。
2、read返回讀取的字節數。如果到達文件尾,read返回0,程序停止。如果發生一個錯誤,read返回-1。
3、如果返回的數值小於想要讀取的數值,這並不是一個錯誤。這有可能是我們接近文件結束(end-of-file),或者從一個管道(pipe)中讀取,或者從終端讀取,也有可能是被一個信號中斷的緣故。
4、通過ctrl+D 可以鍵入文件結束字符。
5、通過以下方式可以將infile文件的內容複製到outfile文件中去
./a.out <infile > outfile