我想创建一个程序 msh 来识别我编写的其他一些 C 程序,并为该 C 程序生成一个新进程并运行它。
例如,我已经编写了自己的复制、移动和删除函数,名为 mycopy、myremove 和 mymove。
我希望能够执行 ./msh mycopy file1 file2 并让 msh 生成一个新进程并运行 mycopy 并执行该操作,然后等待该子进程完成后再退出。
我尝试了您在下面看到的内容,它可以编译,但似乎并没有真正执行任务。有什么建议么?我以前从未使用过 fork()、execl() 或 wait(),所以我可能错过了包含或参数,如果我错了,请纠正我。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc, char* argv[]){
int pid;
if(strcmp(argv[1], "mycopy") == 0){
if(pid = fork() == 0){
execl("/home/1234/mycopy", argv[2], argv[3]);
}
}
if(strcmp(argv[1], "myremove") == 0){
if(pid = fork() == 0){
execl("/home/1234/myremove", argv[2]);
}
}
if(strcmp(argv[1], "mymove") == 0){
if(pid = fork() == 0){
execl("/home/1234/mymove", argv[2], argv[3]);
}
}
if(pid > 0){
wait((int*)0);
}
return 0;
}
我试过这个,工作 3 打印了两次。这是否意味着我的 execl 命令已损坏,如果是,我将如何修复它,因为 argv[2] 和 argv[3] 需要传递给 ./mycopy
int pid = fork();
if(strcmp(argv[1], "mycopy") == 0){
if(pid == 0){
printf("WORKING1");
execl("/home/1234/mycopy", argv[2], argv[3]);
printf("WORKING2");
}
}
wait((int*)0);
printf("WORKING3");
return 0;