簡體   English   中英

用fork()進行C系統編程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM