我正在尝试从特定文件读取输入并使用unix(sys调用)将其写入特定文件。必须以某种方式创建输出部分。
我想做类似以下的事情: ./a.out< input.txt&gt; output.txt的 仅使用以下函数:fork,dup.dup2,exec,open,write,read 代码是这样的:
pid_t pid, runner;
char *path = argv[1];
char enter[] = "/home/demo/Desktop/OS/Ex1/Ex12/code/input.txt";
char to[] = "/home/demo/Desktop/OS/Ex1/Ex12/Ex1/ronen/";
char *out = "/home/demo/Desktop/OS/Ex1/Ex12/Ex1/ronen/out1.txt";
char *args[] = {to, "./a.out","<",enter,">",out, NULL};
char *args2[] = {"cd", to, "./a.out","<",enter,">",to ,NULL};
if ((runner = fork()) < 0) {perror("could not make fork");}
else if (runner == 0) {
printf("true\n");
execvp(args2[0],args2);
} else if (runner != 0) {
waitpid(runner,0,0);
printf("done\n");
}
当我将“a.out”文件放在桌面上时,它会正常工作。
然而有谁知道如何重定向exec函数转到我的spefic文件夹?所以我不必将可执行文件传递到桌面?
答案 0 :(得分:0)
对于读写文件,您只需使用普通的read
和write
函数;您首先需要拥有文件描述符,因此您需要使用fopen
。
总而言之,我见过的每一篇C教程都涵盖了在fork
触及之前很长时间的开放和写作,所以我想知道你一直关注的是什么。我真的只是建议找一个你喜欢的C介绍并阅读前几页;如果您已经了解fork
的作用,那对您来说这将是一块蛋糕。
编辑:另外,您可能会误解
program arguments <from_file >to_file
在shell上使用它时会这样做:
shell 读取该行,并调用program
,将其arguments
作为...参数传递。它检测到该行上的<
和>
以及&#34;弯曲&#34;标准输入和输出文件描述符(是的,标准输入和输出就像那样),实际上是fopen
个ed文件。
program
永远不会看到<from_file
或>to_file
。
编辑:
我不能使用fopen和那些功能。只有.fork,dup.dup2,exec,open,write,read
显然,fopen
只是open
的包装器,并返回文件描述符open
返回。
此外,您的程序使用了大量的libc函数;如果您只允许write
,则不应使用printf
,这是puts
的一个非常方便的格式化包装器,它是{write
的包装器。 1}}。类似的内容适用于您调用的所有函数,即。 waitpid
,execvp
,perror
。您应首先清楚地为自己记录您的要求。
答案 1 :(得分:0)