这个程序虽小,小中见大嘛。主要是理解重定向符号和管道的概念。(八过,概念的理解是建立在代码的基础上)
#include "apue.h"
int main(void)
{
if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1)
printf("cannot seek\n");
else
printf("seek ok\n");
exit(0);
}
把这个程序编译成
a.out
按照我的方式运行程序:
$./a.out < /etc/motd(其实这里/etc/motd就只是一个普通文件,你用其他文件也是可以的)
seek ok
$cat < /etc/motd | ./a.out
cannot seek
为什么同样是读/etc/motd却出现了前者可以改变文件偏移量,后者不行呢?
重定向其实通过dup2来实现的,结合列子来解释,就是关闭不把0只想终端,而是指向/etc/motd。而,/etc/motd是可以改变文件偏移量的。
管道,其实通过pipe来实现的,