首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个管道读写错哪了,哪位高手帮忙看看

2012-09-21 
这个管道读写哪里错了,谁帮忙看看[codeC/C++][/code]#include stdio.h#include string.h#include un

这个管道读写哪里错了,谁帮忙看看
[code=C/C++][/code]#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>

#define K 1024
#define WRITELEN (K*128)

int main(int argc, char **argv)
{
int fd[2];
int nbytes;
int *read_fd = &fd[1];
int *write_fd = &fd[0];
char str[] = "hello pipe";
char readbuff[10*K];

if(pipe(fd)<0)
{
perror("create pipe error\n");
exit(1);
}
int pid = fork();
if(pid<0)
{
perror("fork error");
exit(1);
}

if(pid==0)
{
int write_size = strlen(str);
int result = 0;
close(*read_fd);
while(write_size>0)
{
printf("%s", str);
result = write(*write_fd, str, strlen(str)); //这里出错,result一直是 -1;
//result = write(*write_fd, "hello pipe", 10);
printf("write end, result = %d\n", result);
if(result>0)
{
write_size-=result;
printf("write: %d , leave: %d \n", result, write_size);
}
else
{
break;
}
}
return 0;
}
else
{
wait(NULL);
close(*write_fd);
while(1)
{
nbytes = read(*read_fd, readbuff, sizeof(readbuff));
if(nbytes<=0)
{
printf("no data be write\n");
break;
}
readbuff[nbytes] = '\0';
printf("recv %d , data: %s \n", nbytes, readbuff);
}
return 0;
}
}

[解决办法]
是不是文件描述符用错了?你的write出错,只可能错在文件描述符了,试试fd[1]。

热点排行