试图重定向输入和输出使用系统调用
我试图从特定的文件读取输入并使用unix(sys调用)将其写入到特定的文件。输出部分必须以某种方式创建。试图重定向输入和输出使用系统调用
我想要做类似如下:只使用这些功能 ./a.out < input.txt中> output.txt的 :叉,dup.dup2,EXEC,打开,写入,读取 代码这个:
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文件夹?所以我不必将可执行文件传递到桌面?
对于读取和写入文件,您只需使用正常的read
和write
函数;你首先需要一个文件描述符,所以你需要使用fopen
。总而言之,我见过的每个C教程都涵盖了开放和写作很久之前它会触及fork
,所以我不知道你一直在关注什么。我真的只是推荐找一个你喜欢的C的头版,并阅读前几页;如果你已经明白了fork
的作用,这对你来说将是一块蛋糕。
编辑:还有,你可能会误会使用的shell,当什么
program arguments <from_file >to_file
做:
的外壳读取该行,并调用program
,传递arguments
作为。 ..论点。它检测该行上的<
和>
,并“弯曲”标准输入和输出文件描述符(是的,标准输入和输出表现如此),实际上是fopen
ed文件。
program
从未见过<from_file
也不>to_file
。
编辑在您的评论对你说:
我不能使用的fopen和这些功能。只有.fork,dup.dup2,EXEC,打开,写,读
显然,fopen
是但open
的包装,并返回文件描述符open
回报。
另外,你的程序使用了大量的libc函数;如果只允许使用write
,则不应使用printf
,这是puts
的非常方便的格式化包装,它是write
的包装。类似的东西适用于全部您调用的函数,即。 waitpid
,execvp
,perror
。首先你应该记录你自己的需求。
嗨,首先感谢您的注意! 但我不能使用fopen和那些功能。只有.fork,dup.dup2,exec,打开,写入,读取 – user3253375 2015-04-01 11:11:20
我不明白如何做一个命令“./a.out
我假设你的问题是:如何编写启动第二个程序的程序,该程序的标准输入和输出被重定向到文件?
在您需要按照这个顺序的话:使用pid
在主程序
- fork()的子进程
- wait()的子进程()
在子子进程
- 关闭(0)的标准输入
- open()的输入文件(读取模式)
- 接近(1)在标准输出
- open()的输出文件(具有写入模式)
- EXEC()目标程序
如何使用系统调用
ř EAD Ť他˚F INE 中号 anuals
所有这些手册页示例代码。通过阅读所有这些应用程序,您应该有足够的示例代码来编写整个程序。
我的问题是关于exec我不明白的命令。例如,我想使用“a.out”coomand并且只使用该命令。什么是我必须通过execvp函数的论据。 谢谢。 – user3253375 2015-04-01 12:07:35
你没有得到'shell'和'syscall'的概念。您应该首先尝试更好地理解什么是系统调用,以及在编写代码之前shell是什么。例如,你正试图将一个shell命令行传递给内核。这是无稽之谈,shell **负责将命令行转换为fork/exec序列的正确参数。 – fjardon 2015-04-01 11:44:02
是你的问题:*如何编写一个程序,启动第二个程序的标准输入和输出被重定向到文件?* – fjardon 2015-04-01 11:50:33