管道打开时管道“地址错误”

时间:2019-09-04 16:17:20

标签: c linux pipe posix ipc

因此,我试图启动一个使用管道在进程之间进行通信的Web服务器。

我当时正在考虑创建一个名为ctx的结构,以便也发送其他信息。

我的代码如下:

webserver.h

typedef struct
{
    int pipefd[2];
} ctx_t;

webserver.c

int main(int argc, char *argv[]){
    ctx_t *ctx = {0};
    if(pipe(ctx->pipefd) == -1){
        perror("ctx pipe error");
        exit(EXIT_FAILURE);
    }
    ...
    ...
}

输出:“ ctx管道错误:地址错误”

如果我这样声明我的程序,则没有错误,程序继续运行

webserver.h

int pipefd[2];

webserver.c

int main(int argc, char *argv[]){
    if(pipe(pipefd) == -1){
        perror("ctx pipe error");
        exit(EXIT_FAILURE);
    }
    ...
    ...
}

有什么想法为什么我不能打开结构内部的管道?我仍未在主程序中进行任何分叉。

谢谢。

1 个答案:

答案 0 :(得分:4)

您正在将空指针传递给不接受空指针的函数(系统调用)pipe()。不要那样做!

ctx_t *ctx = {0};

这会将ctx设置为空指针,尽管有些冗长(大括号不是必需的,尽管它们无害)。您需要先在某处分配ctx_t结构,然后才能使用它。

使用:

cts_t ctx = { { 0, 0 } };

和:

if (pipe(ctx.pipefd) != 0)
    …report error etc…

也可以使用== -1