2012-09-24 27 views
0
if((sem_init(sem, 1, 1)) == 1) perror("error initiating sem"); 

如果我包含這行代碼,我的程序只需啓動和退出。我剛開始學習如何使用信號量。我正在使用cygwin,並且當printf的這個print打印到控制檯上時,這行代碼被註釋掉了,但是當包含這個時,沒有任何反應。cygwin c sem_init

我做了以下獲得cygserver going-

CYGWIN=server 
ran /bin/cygserver-config 
ran /usr/sbin/cygserver 

爲配置故稱cygserver已經運行 而對於sygserver它saids-

initailaizing complete 
failed to created named pipe: is the daemon already running? 
fatal error on IPC transport: closing down 

任何想法?

+0

閱讀[手冊頁](http://pubs.opengroup.org/onlinepubs/009695399/functions/sem_init.html)並檢查返回值。 –

+0

對不起,新增到stackoverflow。不知道'接受'在哪裏。我已經閱讀了sem_init()的手冊頁。 對不起,剛剛注意到返回值'1'應該是'-1',但是這並沒有改變。我在'printf'之後放了'\ n',出於某種原因,現在打印出來了。它正在發展中...... – RileyVanZeeland

+0

它沒有打印,因爲當stdout是一個終端時,printf會將其輸出緩存到內存中,並且只有在打印新行時,其緩衝區變滿,或者用'fflush( 3)'。如果您的程序在緩衝區刷新之前崩潰,則緩衝的輸出永遠不會顯示。在調試崩潰問題時,您應該始終確保刷新緩衝區,以確保崩潰的位置在您認爲崩潰的位置。 –

回答

1

我想出了什麼是錯的。在將任何內存分配給數據之前,我正在使用data(struct)= shmat()。由於某種原因,我的'printf'停止工作。