@@ -41,28 +41,31 @@ using namespace tbox::event;
4141
4242void PrintUsage (const char *process_name)
4343{
44- cout << " Usage:" << process_name << " your_pipefile" << endl;
44+ cout << " Usage:" << process_name << " epoll|select your_pipefile" << endl;
4545}
4646
4747int main (int argc, char *argv[])
4848{
49- if (argc < 2 ) {
49+ if (argc < 3 ) {
5050 PrintUsage (argv[0 ]);
5151 return 0 ;
5252 }
5353
5454 LogOutput_Enable ();
55- Loop* sp_loop = Loop::New ();
55+ Loop* sp_loop = Loop::New (argv[1 ]);
56+
57+ const char * pipe_file = argv[2 ];
58+ ::unlink (pipe_file);
5659
57- const char * pipe_file = argv[1 ];
5860 int ret = mkfifo (pipe_file, 0666 );
5961 if (ret != 0 ) {
6062 LogWarn (" mkfifo() ret:%d, errno:%d" , ret, errno);
6163 }
6264 int fd = open (pipe_file, O_RDONLY|O_NDELAY);
65+ LogDbg (" fd:%d" , fd);
6366
6467 FdEvent* sp_fd_read = sp_loop->newFdEvent ();
65- sp_fd_read->initialize (fd, FdEvent::kReadEvent | FdEvent:: kHupEvent , Event::Mode::kPersist ); // ! 可读与挂起事件一直有效
68+ sp_fd_read->initialize (fd, FdEvent::kReadEvent , Event::Mode::kPersist ); // ! 可读与挂起事件一直有效
6669 sp_fd_read->enable ();
6770
6871 sp_fd_read->setCallback (
@@ -75,16 +78,15 @@ int main(int argc, char *argv[])
7578 input_buff[rsize - 1 ] = ' \0 ' ;
7679 LogInfo (" read[%d]:%s" , rsize, input_buff);
7780 } else {
78- LogInfo (" read 0" );
79- }
80- }
81+ LogNotice (" read 0" );
82+ sp_fd_read-> disable ();
83+ close (fd);
8184
82- // ! 当管道断开的时候
83- if (event & FdEvent::kHupEvent ) {
84- LogNotice (" hup" );
85- fd = open (pipe_file, O_RDONLY|O_NDELAY);
86- sp_fd_read->initialize (fd, FdEvent::kReadEvent | FdEvent::kHupEvent , Event::Mode::kPersist );
87- sp_fd_read->enable ();
85+ fd = open (pipe_file, O_RDONLY|O_NDELAY);
86+ LogDbg (" fd:%d" , fd);
87+ sp_fd_read->initialize (fd, FdEvent::kReadEvent , Event::Mode::kPersist );
88+ sp_fd_read->enable ();
89+ }
8890 }
8991 }
9092 );
0 commit comments