我今天开始在 C 中使用 pipe() 和 fork() 和 exec(),现在我遇到了一个问题:
主程序,创建两个管道和分叉。子进程对另一个程序执行 exec(),该程序现在只是一个测试程序,它从标准输入读取,与其父进程通信并通过标准输出写入结果。主程序应该接收数据,与 SQLite 3 数据库通信并使用管道返回数据。这部分问题解决了,管道打开和关闭正常,并且有通信。
那么问题是,在某个点的子进程(用 exec() 调用的那个)中,我有这个:
printf("Strid sent: %s\n", strid);
write(4,strid,sizeof(strid));
printf("Str sent: %s\n", str);
write(4,str,sizeof(str));
父母应该正确阅读这部分内容:
read(select[0],strid, sizeof(strid));
printf("Strid recived: %s\n",strid);
int id = atoi(strid);
printf("Id recived: %d\n",id);
read(select[0],buffer, sizeof(buffer));
printf("Buffer recived: %s\n",buffer);
但是我收到的那些 printf 是:
Strid sent: 1
Str sent: start
Strid recived: 1
Id recived: 1
Buffer recived: 7� (and other strange characters)
如您所见,问题在于接收第二个命令(并且该部分按原样复制,其中没有其他代码)。
我也不得不说,接收 str 的“buffer”变量被声明为 char buffer[20] 并且在 read() 之前没有被使用过
先感谢您!