精華區beta Electronics 關於我們 聯絡資訊
※ 引述《adddream (哆啦A孟)》之銘言: : int main(void) : { : int fd; : fd=open("hello",O_RDWR | O_CREAT, 0666); : if(fd<0) : { : perror("open"); : exit(1); : } : lock_set(fd,F_WRLCK); : getchar(); : lock_set(fd,F_UNLCK); : getchar(); : close(fd); : exit(0); : } 你可以試試看這個程式: int main(void) { getchar(); getchar(); return 0; } 可以得到一樣的效果。 這是因為getchar()只會讀取一個字元。 你如果執行這個程式,輸入一個字元a、『再按Enter』, 等於輸入兩個字元,因為按下Enter會輸入一個『newline』。 所以第二個getchar就會因為讀到newline而結束。 我在Linux上測試是如此, 但是好像Windows上『newline』好像佔兩個字元,不清楚, 你可以用3個getchar測試看看。 : 如上程式,理想的情形應該是,在呼叫lock_set(fd,F_WRLCK)完之後,會因為getchar() : 而等待輸入,輸入完之後街著呼叫lock_set(fd,F_UNLCK),然後在接著由於getchar() : 而等待輸入,然後停止。 : 但我試驗完之後,發現在呼叫完lock_set(fd,F_UNLCK)之後,程式就停了 =.=。 : 也就是,第二個getchar()沒有作用。 : 但若此時,我在第二個getchar()在加入一個getchar()之後,成式就可以等待輸入了。 : but,只會停一次 =.=。意思是說,第一個getchar()不知道那去了。 : 請問這是為捨壓 ??? -- Albert Einstein : If there is any religion that could cope with modern scientific needs it would be Buddhism. 《金剛經》離一切諸相,則名諸佛。 http://web.cc.ncu.edu.tw/~93501025/jg.doc -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.130.69