2. 输入和输出

1.文件描述符,文件描述符通常是一个小的非负整数,内核用来标识一个文件。

2.每当运行一个程序,shell会打开三个文件描述符:标准输入(描述符0),标准输出(描述符1),标准错误(描述符2)。一般情况下这三个文件描述符都链接指向终端,用户也可以重定向到某个文件。

open函数在打开文件时,返回的文件描述符总是从最小值0逐渐递增,比如运行一个程序,最先打开标准输入,所以标准输入的文件描述符为0,其次是标准输出,标准错误,分别是1和2、

在POSIX中,文件描述符已经被标准化,定义为STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,它们的值分别是0、1、2。这三个宏定义在<unistd.h>中。

若此时关闭标准输出:

close(STDOUT_FILENO);

然后打开一个本地文件:

int fd = open("test.txt", O_RDWR);

则fd的值一定是1(优先使用可用的最小的文件描述符),这就造成随后的标准输出重定向到了文件test.txt中,比如:

std::cout << "hello world" << std::endl;

此时就将hello world写入到了文件test.txt中,而不是输出到控制台。

3.头文件<unistd.h>提供了open,read,write,lseek,close这些不带缓冲的io,这些函数都使用文件描述符,例如:

#define BUFLEN 1024

char buf[BUFLEN];

int n = read(STDIN_FILENO, buf, BUFLEN);

posted @ 2021-05-10 22:09  博客员_小李  阅读(85)  评论(0)    收藏  举报