当前位置: 技术问答>linux和unix
初学.请帮忙看看fork的子进程读管道时为何阻塞!
来源: 互联网 发布时间:2015-08-30
本文导语: /********************************************** * 鏂囦欢鍚? writelog.c * 鎻忚堪: 瀹氭椂璁板綍鏃ュ織娑堟伅 * 浣滆€? * 鏃ユ湡: 2005-01-06 * 淇敼鏃ユ湡: ***********************************************/ #include #include #include #inclu...
/**********************************************
* 鏂囦欢鍚? writelog.c
* 鎻忚堪: 瀹氭椂璁板綍鏃ュ織娑堟伅
* 浣滆€?
* 鏃ユ湡: 2005-01-06
* 淇敼鏃ユ湡:
***********************************************/
#include
#include
#include
#include
#include
#include
#define TIMER 10 /* 鍐欐棩蹇楁秷鎭棿闅旀椂闂?*/
int main( int argc, char *argv[] )
{
pid_t pid = 0;
int fd[2]; /* pipe */
if (pipe(fd) 0) /*鐖惰繘绋?*/
{
char command[20] = {0};
close( fd[0] );
/* 加上这段则标号1处被阻塞
do
{
printf( "nCommand('quit or exit' quit!):" );
fgets( command, 20, stdin);
if ( strncmp(command,"quit",4)==0 || strncmp(command,"exit",4)==0 )
{
write( fd[1], command, 4 );
break;
}
}while ( 1 );
加上这段则标号1处被阻塞 */
sleep( 2 );
}
return 0;
}
* 鏂囦欢鍚? writelog.c
* 鎻忚堪: 瀹氭椂璁板綍鏃ュ織娑堟伅
* 浣滆€?
* 鏃ユ湡: 2005-01-06
* 淇敼鏃ユ湡:
***********************************************/
#include
#include
#include
#include
#include
#include
#define TIMER 10 /* 鍐欐棩蹇楁秷鎭棿闅旀椂闂?*/
int main( int argc, char *argv[] )
{
pid_t pid = 0;
int fd[2]; /* pipe */
if (pipe(fd) 0) /*鐖惰繘绋?*/
{
char command[20] = {0};
close( fd[0] );
/* 加上这段则标号1处被阻塞
do
{
printf( "nCommand('quit or exit' quit!):" );
fgets( command, 20, stdin);
if ( strncmp(command,"quit",4)==0 || strncmp(command,"exit",4)==0 )
{
write( fd[1], command, 4 );
break;
}
}while ( 1 );
加上这段则标号1处被阻塞 */
sleep( 2 );
}
return 0;
}
|
在sco上测试没问题。
不过你的这两句:fprintf( output, "hello. world!n" );
fflush( output );
似乎永远也执行不到。
不过你的这两句:fprintf( output, "hello. world!n" );
fflush( output );
似乎永远也执行不到。