管道无法读取/写入所有字符

时间:2015-05-15 10:44:36

标签: c++ linux ubuntu pipe fork

我正在尝试使用管道将一个char数组从一个进程发送到另一个进程,这些字符正在传递,但不是全部!只是开头的一部分。 这是我的代码:

int p1[2], p2[2];

int main()
{
    pipe(p1);

    int f1= fork();

    if(f1 == 0)

    {       
        char ar[100];
        int n = 38;
        for(int i=0;i<n;i++)
        { ar[i] = 'f'; }
        close(p1[0]); //close the read
        write(p1[1],ar,n+1);

    } else if (f1 > 0)

    {
        wait(NULL);
        int f2 = fork();
        if(f2 == 0)

        {   
            char arr2[100];
            close(p1[1]); //close the write
            int m = read(p1[0],arr2,strlen(arr2));
            cout << arr2 << " " << m << endl;   

        } 
        else if (f2 > 0)

        {wait(NULL);}

    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您在未初始化的std::strlen()数组上调用char,这是您的错误。 std::strlen()查找数组中第一个出现空字节并返回其位置。但是数组未初始化,因此首次出现空字节未定义

此外,您应该检查库函数的返回值(pipe()read()write()fork()等。)