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