当前位置: 技术问答>linux和unix
linux管道参数传递的问题-APUE上的例子中的疑问
来源: 互联网 发布时间:2017-01-11
本文导语: 程序如下: #include "apue.h" #include #define PAGER ...
程序如下:
新建了一个文件 test,然后运行这个程序
./a.out test
结果发现 test并没有作为参数 传递给 ls命令,而是ls打印了当前目录下的文件的信息,
但是如果把ls命令换为more命令,就会打印test文件中的内容【test文件作为参数传递给了more命令】
这是为什么啊???
#include "apue.h"
#include
#define PAGER "${PAGER:-more}" /* environment variable, or default */
int
main(int argc, char *argv[])
{
char line[MAXLINE];
FILE *fpin, *fpout;
if (argc != 2)
err_quit("usage: a.out ");
if ((fpin = fopen(argv[1], "r")) == NULL)
err_sys("can't open %s", argv[1]);
if ((fpout = popen("ls", "w")) == NULL)
err_sys("popen error");
/* copy argv[1] to pager */
while (fgets(line, MAXLINE, fpin) != NULL) {
printf("line is %sn", line);
if (fputs(line, fpout) == EOF)
err_sys("fputs error to pipe");
}
if (ferror(fpin))
err_sys("fgets error");
if (pclose(fpout) == -1)
err_sys("pclose error");
exit(0);
}
新建了一个文件 test,然后运行这个程序
./a.out test
结果发现 test并没有作为参数 传递给 ls命令,而是ls打印了当前目录下的文件的信息,
但是如果把ls命令换为more命令,就会打印test文件中的内容【test文件作为参数传递给了more命令】
这是为什么啊???
|
linux-008:~/test/test/4> echo 1.txt | ls
1.txt main main.cpp main.s Makefile
linux-008:~/test/test/4> echo 1.txt | more
1.txt
linux-008:~/test/test/4> echo 1.txt |xargs ls
1.txt
要想传给ls 可以用xargs
1.txt main main.cpp main.s Makefile
linux-008:~/test/test/4> echo 1.txt | more
1.txt
linux-008:~/test/test/4> echo 1.txt |xargs ls
1.txt
要想传给ls 可以用xargs