[英]C System Programming with fork()
好吧,我到底在做什么錯? 我正在Ubuntu上執行此操作,我希望它采用系統命令“ ls”和參數“ -a”,然后讓子級執行它,然后父級僅打印出一些內容。 我不明白為什么我不斷收到兩次“家長”的消息。 有任何想法嗎?
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/wait.h>
void Cprocess(char *commands, char *scommands[]);
void Pprocess(void);
void main(int argc, char *argv[])
{
char *sendcommand[] = {argv[1],argv[2],0};
char *commands = argv[0];
int pid;
if((pid=fork()) ==-1)
{
perror("Error!!\n");
}
else if(pid==0)
Cprocess(commands, sendcommand);
else
{
wait(0);
printf("Parent\n");
}
}
void Cprocess(char *argv1, char *argv2[])
{
execvp(argv1, argv2);
exit(19);
}
這對我來說不是很好,這是我輸入的命令:
./filename ls -a
這是我的結果:
filename1 filename2 filename3
Parent
Parent
恭喜:您的程序幾乎可以正常工作。 我認為通過插入Cprocess()
函數,事情變得比需要的復雜。 沒有它,發生的事情可能會更清楚。 請允許我重新安排您的程序:
void main(int argc, char *argv[]) {
int pid = fork();
if (pid ==-1) {
perror("Error!!\n");
} else if (pid==0) {
char *sendcommand[] = { argv[1], argv[2], 0 };
execvp(argv[0], sendcommand);
exit(19);
} else {
wait(0);
printf("Parent\n");
}
}
從功能上講,它等效於原始的main()
,我敢打賭,您會立即在其中看到問題所在。
暗示:
仔細查看
execvp()
的參數。
提示2:
execvp()
的第一個參數指定要運行的程序。
提示3:
你是認真的嗎? 讓您的大腦或至少調試器投入工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.