私が書いた他のいくつかの C プログラムを認識し、その C プログラムの新しいプロセスを生成して実行するプログラム msh を作成したいと考えています。
たとえば、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;