作者zxvc (zxvc)
站内Electronics
标题Re: [问题] 奇怪的c问题
时间Fri Mar 2 18:09:03 2007
※ 引述《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()不知道那去了。
: 请问这是为舍压 ???
--
《金刚经》离一切诸相,则名诸佛。
http://web.cc.ncu.edu.tw/~93501025/jg.doc
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.130.69
※ 编辑: zxvc 来自: 122.116.13.117 (02/25 22:12)