LinuxDev 板


LINE

继刚刚问有好心大大 帮我解了gets之後 我写了一个 读取者锁-写入者锁 的程式 程式码如下(先说好 不是要帮我debug 这编译有通过 只是在执行时gets的地方好像会跳掉): #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <string.h> #define SIZE 100 //Set the input buffer size = 100 int main(int fd) { char input[SIZE]; char c; struct flock fl; FILE *fin,*fout; int choose; printf("------------Menu------------\n"); printf("1.WL\n2.RL\n3.Unlock\n"); printf("Enter your choose: "); scanf("%d",&choose); fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; //EOF fl.l_pid = getpid(); switch(choose){ case 1: fl.l_type = F_WRLCK; //write lock fout = fopen("file","w"); fd = fileno(fout); fcntl(fd, F_SETLKW, &fl); //write lock fd printf("Input the string: "); gets(input); fputs(input,fout); break; case 2: fl.l_type = F_RDLCK; //read lock fin = fopen("file","r"); fd = fileno(fin); fcntl(fd, F_SETLKW, &fl); //read lock fd printf("The string be read is: "); while((c = fgetc(fin)) != EOF) printf("%c",c); printf("\nWait for 5 seconds...\n"); sleep(5); break; default: fl.l_type = F_UNLCK; //unloock fd = fileno(fout); fout = fopen("file","w"); fcntl(fd, F_SETLKW, &fl); printf("Input the string: "); gets(input); fputs(input,fout); break; } fl.l_type = F_UNLCK; fcntl(fd, F_SETLK, &fl); //unlock fd return 0; } 执行时如下: $ ./proc.o file ------------Menu------------ 1.WL 2.RL 3.Unlock Enter your choose: 1 Input the string: $ 搞不懂为何会降子 上一篇的程式执行起来就没有这问题 另外 如果将程式中的gets(input); 改成scanf("%s",input); 就没有此问题 缺点是 不能输入空白键 不然它只能读到句子中的第一个单字 今天难得会上来问两篇 谢谢回答 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.240.190.163 ※ 编辑: amu1661024 来自: 123.240.190.163 (12/20 17:25)
1F:推 carlcarl:也许是\n的问题? 12/20 17:28
2F:→ amu1661024:意思就是说我的gets再我按键盘之前就先读到\n罗? 12/20 17:32
3F:→ amu1661024:不过我真的看不出程式中有什麽地方能让他读到\n 12/20 17:34
4F:推 carlcarl:scanf("%d%*c",&choose); 这样咧? 12/21 00:43
5F:推 kerickuo:是 \n 的问题没错 12/21 17:41
6F:→ amu1661024:喔 我懂了 因为之前再按scanf时的enter被保留下来 12/21 21:04
7F:→ amu1661024:所以之後gets会先读到\n 12/21 21:05
8F:→ amu1661024:再gets下面再用一次gets果然可以 谢谢楼上诸位大大 12/21 21:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP