这个管道读写哪里错了,谁帮忙看看
[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]。