10.7 I/O重定向
I/O重定向
shell提供了I/O重定向的操作符,可以将文件和标准的输入输出联系起来
$ ls > foot.txt 把ls执行结果(标准输出)重定向到foot.txt文件中
注意:
截断模式(先清空文件,再写入内容)
追加模式(直接追加到文件的尾部)
- < 读取文件内容到stdin(0)
在shell中创建一个自定义文件描述符用于写入(追加模式):
$ exec 5>>input.txt
dup2函数
#include <unistd.h>
int dup2(int oldfd, int newfd)
dup2函数的功能为:
拷贝描述符表表项oldfd到描述符表项newfd,覆盖newfd,如果newfd已经打开,则先关闭
比如:
dup2(4,1) 则是把描述符表项4复制到1(标准输出),那么写到标准输出的任何数据都
写到到文件描述符4指向的文件中(因为1和4的描述表表项相同,而且1的已经打开的文件在复制之前就已经关闭,所以两个都指向同一个文件表项)
练习题10.4:
如何用dup2将标准输入重定向到描述符5?
dup2(5,0)
练习题10.5:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
int fd1,fd2;
char c;
fd1 = open("footbar.txt",O_RDONLY,0);
fd2 = open("footbar.txt",O_RDONLY,0);
read(fd2, &c, 1); //读取一个字符
dup2(fd2,fd1); //fd1复制了fd2的描述符表项,fd1,fd2拥有同一个文件位置
read(fd1, &c, 1); //继续读取一个字符
printf("c=%c\n", c); //0
exit(0);
}