※ 引述《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