gpt4 book ai didi

c - 尝试使用系统调用重定向输入和输出

转载 作者:行者123 更新时间:2023-11-30 20:38:20 24 4
gpt4 key购买 nike

我正在尝试从特定文件读取输入并使用unix(系统调用)将其写入特定文件。输出部分必须以某种方式创建。

我想做如下的事情:./a.out < 输入.txt > 输出.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 函数重定向到我的特定文件夹?这样我就不必将可执行文件传递到桌面?

最佳答案

对于读写文件,你只需使用普通的 readwrite功能;您首先需要有一个文件描述符,因此您需要使用 fopen

总而言之,我见过的每一个 C 教程都在接触之前就涵盖了打开和编写 fork ,所以我想知道你一直在关注什么。我真的建议您找到您喜欢的 C 简介并阅读前几页;如果你已经明白了什么fork是的,这对您来说是小菜一碟。

编辑:另外,您可能会误解什么

program arguments <from_file >to_file 

在 shell 上使用它时:

shell 读取该行,并调用 program ,通过它arguments作为...论点。它检测到 <>在那一行上并“弯曲”标准输入和输出文件描述符(是的,标准输入和输出的行为就像那样),实际上是 fopen ed 文件。

program从未见过<from_file也不>to_file .

编辑在您的评论中说:

i can not use fopen and those functions. only .fork,dup.dup2,exec,open,write,read

显然,fopen只是 open 的包装并返回文件描述符 open返回。

此外,您的程序使用了大量的 libc 函数;如果您只被允许 write ,你不应该使用printf ,这是 puts 的一个非常方便的格式化包装器。 ,它是 write 的包装器。类似的事情适用于您调用的所有函数,即。 waitpid , execvp , perror 。首先,您应该为自己清楚地记录您的要求。

关于c - 尝试使用系统调用重定向输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com