0

奇妙な出力が得られました:

Read 0 bytes: P
?\?  

私のコードから:

#include <stdio.h>
#include <string.h>
#include <unistd.h>

char phrase[0] = "stuff this in your pipe and smoke it";
int main(int argc, char* argv[]) {
    int fd[2], bytesRead;
    char message[100];
    int pid;
    pid = fork();
    pipe(fd);
    if (pid == 0) {
        close(fd[0]);
        write(fd[1], phrase, strlen(phrase) + 1);
        close(fd[1]);
    }else {
        close(fd[1]);
        bytesRead = read(fd[0], message, 100);
        printf("Read %d bytes: %s\n", bytesRead, message);
        close(fd[0]);

    }
}

どこが間違っているのかわかりません。

4

2 に答える 2

2

@cnicutar はすでに 1 つの問題に回答しています。別の問題は次のとおりです。

 char phrase[0] = "stuff this in your pipe and smoke it";

長さ 0 の配列を宣言し、はるかに長い文字列を格納しています。

次のように変更します。

char phrase[] = "stuff this in your pipe and smoke it";

C 標準では、配列のサイズは 0 より大きくする必要があります。

C99、6.7.5.2 から:

それらが式 (配列のサイズを指定する) を区切る場合、式は整数型を持つ必要があります。式が定数式の場合は、0 より大きい値を持つ必要があります。

于 2012-10-28T09:48:33.253 に答える
2
pid = fork();
pipe(fd);

この例は、子プロセスが親から記述子を継承する場合に機能します。あなたはあなたのpipe forkに電話したいと思うでしょう。

于 2012-10-28T09:39:33.493 に答える