您好我有一个运行两个程序一个文件输入到两个程序脚本
#Script file
./prog1
./prog2
PROG1是一个C程序
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
printf("prog1 running\n");
int tmp;
scanf("%d", &tmp);
printf("%d\n", tmp+10);
printf("prog1 ended\n");
return 0;
}
PROG 2是一个C程序以及
脚本#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
printf("prog2 running\n");
int tmp;
scanf("%d\n", &tmp);
printf("%d\n", tmp+10);
printf("prog2 ended\n");
return 0;
}
我运行命令
./s CRIPT <文件
其中file是
123
456
输出是
prog1 running
133
prog1 ended
prog2 running
10
prog2 ended
好像PROG2没有从文件的输入,什么是引擎盖下发生?
prog2是否可能用“\ n”代替数字?
两个进程之间共享一个输入文件描述符(它们从脚本继承它)。第一个进程吞噬了所有的数据。第二个进程然后在文件的最后找到fd。如果这需要工作,你可以在一个(或两个)进程中倒回fd。 –
所以你的意思是当我运行脚本时,会为'script'创建一个新的文件入口,然后脚本fork'prog1'' prog2',所以'prog1'' prog2'从'script'继承文件描述符。由于'prog1'吃掉了所有的输入,这个文件的文件入口的偏移量指向文件的末尾,所以'prog2'什么也得不到。 –
是的,就是这样。这个小shell脚本说明了这个概念:'{echo'Line 1';读-r line1;回声“$ line1”;回声“2号线”;读-r line2;回声“$ line2”; } <<< $'content line 1 \ ncontent line 2'' –