因此,我试图启动一个使用管道在进程之间进行通信的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);
}
...
...
}
有什么想法为什么我不能打开结构内部的管道?我仍未在主程序中进行任何分叉。
谢谢。
答案 0 :(得分:4)
您正在将空指针传递给不接受空指针的函数(系统调用)pipe()
。不要那样做!
ctx_t *ctx = {0};
这会将ctx
设置为空指针,尽管有些冗长(大括号不是必需的,尽管它们无害)。您需要先在某处分配ctx_t
结构,然后才能使用它。
使用:
cts_t ctx = { { 0, 0 } };
和:
if (pipe(ctx.pipefd) != 0)
…report error etc…
也可以使用== -1
。