gpt4 book ai didi

c - 如何使用 exec() 系统调用返回数字的平方并将其存储到文件中?

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

用户在命令行中给出一个数字,我需要返回该数字的平方并将其存储到名为 child.txt 的文件中,但我需要通过创建一个子进程并使用exec()。我到底该怎么做?这是我到目前为止所拥有的:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
FILE *f;
f = fopen("child.txt", "w");
int pid = fork();
square(argv);
exec(); // This is wrong, I need to fix this
return 0;
}

int square(char *argv[]) {
int i;
i = atoi(argv[1]);
return i*i;
}

我应该将哪些参数传递给 exec()?我见过其他示例,其中 exec() 具有 echo-ls 等参数,但是否可以以某种方式传入 square()我写的函数?

最佳答案

出于多种原因,这是一个非常糟糕的主意......但你一定可以做到:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int square(const char *arg) {
int i;
i = strtoll(arg, NULL, 10);
return i*i;
}

int main(int argc, char *argv[]) {
FILE *f;
char cmd[128];
int rv;

if( argc < 3 ) {
fputs( "Please specify target file and integer to square\n", stderr);
exit(EXIT_FAILURE);
}

f = fopen(argv[1], "w");
if( f == NULL ) {
perror(argv[1]);
exit(EXIT_FAILURE);
}
rv = snprintf(cmd, sizeof cmd, "echo %d >& %d", square(argv[2]), fileno(f));
if( rv >= sizeof cmd ) {
fputs( "Choose a smaller int\n", stderr);
exit(EXIT_FAILURE);
}

execl("/bin/sh", "sh", "-c", cmd, NULL);
perror("execl");
return EXIT_FAILURE;
}

但请注意,如果这是一项作业,并且您被告知要使用 exec*,那么此解决方案的成绩将为 F。这不是你应该做的。 (至少我希望不是。如果这是目标,那么这是一项糟糕的任务。)

关于c - 如何使用 exec() 系统调用返回数字的平方并将其存储到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636128/

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