簡體   English   中英

c派生管道和讀取功能從文件描述符中給出隨機字節

[英]c fork pipe and read fucntion gives random bytes from file descriptor

嗨,我的C程序遇到了一些問題。 目標是fork兩次,然后使用pipe將一些數據從子2傳遞到子1,然后將一些不同的數據從子1傳遞到父,最后在父中打印出來。 這是我的代碼:

int main(void)
{
    int f,f2,nread;
    int pfd[2], pfd2[2];
    char buffer[512], *str;

    if(pipe(pfd)==-1) {
        errorHandler("pipe");
    }

    if((f=fork())==-1) {
        errorHandler("fork 1");
    } else if(f == 0) {
        /*child 1*/
        if(pipe(pfd2)==-1) {
            errorHandler("pipe 2");
        }
        if((f2=fork())==-1) {
            errorHandler("fork 2");
        } else if(f2 == 0) {
            /*child 2*/
            close(pfd[0]);
            close(pfd[1]);
            close(pfd2[0]);
            str = "rollin";
            printf("-child 2 writing: %s\n", str);
            if(write(pfd2[1], &str, BUFFSIZE)==-1) {
                errorHandler("write 2");
            }
        } else {
            /*child 1*/
            close(pfd[0]);
            close(pfd2[1]);
            if((nread=read(pfd2[0], &buffer, 512))==-1) {
                errorHandler("read child 1");
            }

            buffer[nread] = 0;
            printf("child 1 read data %d [%s]\n", nread, buffer);

            str = "patrollin patrolling hehe";
            printf("-child 1 writing %s\n", str);
            if(write(pfd[1], &str, BUFFSIZE)==-1) {
                errorHandler("write");
            }
        }
    } else {
        /*parent*/
        close(pfd[1]);
        if((nread=read(pfd[0], buffer, sizeof(buffer)))==-1) {
            errorHandler("read");
        } else {
            buffer[nread] = 0;
            printf("parent read data: %d [%s]\n", nread, buffer);
        }
    }

    return 0;
}

輸出是讀取數據(如我指定的512字節),但不是我發送的數據。 我從內存中取了一些隨機符號(文件描述符正確通過了,對嗎?)。 我來這里的原因是我無法弄清楚這是怎么回事。 我有一個程序,它只有一個分叉並且動作類似,它基於相同的技術並且正在運行。 誰能給我一個提示我做錯了什么?

read的第二個參數是指向緩沖區的指針。 write的第二個參數是指向要寫入的數據的指針。 所以你應該使用

read(pfd2[0], buffer, 512)

write(pfd2[1], str, BUFFSIZE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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