C++利用shmget实现start,stop交替执行2008-10-27 10:03:14 来源:中国自学编程网 作者:佚名 点击:
C++利用共享内存实现start执行之后已经要执行stop才能在执行start,把mian的源代码贴出来说明这么个问题 ![]() C++利用共享内存实现start执行之后已经要执行stop才能在执行start,把mian的源代码贴出来说明这么个问题 int main(int argc, char *argv[]) { int iShmId; if( argc <= 1) { DisplayHelp(); } else if( !strcmp( argv[1], "start" ) ) { iShmId = shmget( ftok("dvrcollector",1), 1 , IPC_CREAT|IPC_EXCL|0666 ); if( -1 == iShmId && errno == EEXIST ) { printf( "dvrcollector already running.\n"); return -1; } // printf( "start...\n"); StartDownFile(); } else if( !strcmp( argv[1], "restart" ) ) { iShmId = shmget( ftok("dvrcollector",1), 1 , IPC_CREAT|IPC_EXCL|0666 ); if( -1 == iShmId && errno == EEXIST ) { StopDownFile(); // printf( "stop...\n"); sleep(1); } // printf( "start...\n"); StartDownFile(); } else if( !strcmp( argv[1], "stop" ) ) { iShmId = shmget( ftok("dvrcollector",1), 1 , IPC_CREAT|IPC_EXCL|0666 ); if( -1 == iShmId && errno == EEXIST ) { if( -1 != (iShmId = shmget( ftok("dvrcollector",1), 1 , IPC_CREAT | 0666 ) ) ) shmctl( iShmId, IPC_RMID, NULL); // printf( "stop...\n"); StopDownFile(); } else { shmctl( iShmId, IPC_RMID, NULL ); printf( "dvrcollector not running.\n" ); } } else { DisplayHelp(); } return 0; }
|