- 论坛徽章:
- 0
|
我将代码中的pipe创建函数(红色部分)放置在循环外,程序运行后,报read pipe failed的错误!
如果将pipe创建函数(红色部分)放置在循环内,则程序运行正确,请问高手这是为什么呢?
int main()
{
struct sockaddr_in s_addr,c_addr;
char buf[SIZE];
char buf2[SIZE];
int num;
int len;
int s_fd;
int fd[2];
int pid;
len=sizeof(c_addr);
s_fd=socket(AF_INET,SOCK_DGRAM,0);
if(s_fd < 0)
{
myerr("create socket error!");
}
memset(&s_addr,0,sizeof(s_addr));
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(5051);
s_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(s_fd,(struct sockaddr *)&s_addr,sizeof(s_addr))<0)
{
myerr("bind error!");
}
while(1)
{
if(pipe(fd)<0)
{
myerr("pipe failed!");
}
num=recvfrom(s_fd,buf,SIZE,0,(struct sockaddr *)&c_addr,&len);
if(num < 0)
{
myerr("recv message error!");
}
printf("client message: %s\n",buf);
if((pid=fork())<0)
{
myerr("fork failed!");
}
else if(pid==0)
{
close(fd[0]);
dup2(fd[1],STDOUT_FILENO);
close(fd[1]);
execl("/bin/ps","ps","aux",(char *)0);
exit(0);
}
else
{
waitpid(pid);
close(fd[1]);
num=read(fd[0],buf2,SIZE);
close(fd[0]);
printf("%s \n",buf2);
if(num < 0)
{
myerr("read pipe failed!");
}
}
}
我将代码中的pipe创建函数(红色部分)放置在循环外,程序运行后,报read pipe failed的错误!
如果将pipe创建函数(红色部分)放置在循环内,则程序运行正确,请问高手这是为什么呢? |
|