免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1106 | 回复: 5
打印 上一主题 下一主题

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-06 10:20 |只看该作者 |倒序浏览
  1. #include <stdio.h>;
  2. #include <string.h>;
  3. #include <stdlib.h>;

  4. int main(int argc,char** argv)
  5. {
  6.         system("top|head >; aa.txt");
  7.         FILE *fp;
  8.         if( (fp = fopen("aa.txt","r")) == NULL ) {
  9.                 /* TODO:error handling */
  10.                 return -1;
  11.         }
  12.         char str[1024];
  13.         fgets(str,sizeof(str),fp);
  14.         fgets(str,sizeof(str),fp);
  15.         fgets(str,sizeof(str),fp);
  16.         char *p = strstr(str,"idle");
  17.         p = p - 6;
  18.         p[4] = '\0';
  19.         printf("%s\n",p);

  20.         return 0;
  21. }
复制代码



Linux上运行,在本目录生成aa.txt文件,然后读,然后打印,退出。
奇怪的是,退出之后,bash的输入不再回显了!是不是跟缓冲有什么关系?请指教

论坛徽章:
0
2 [报告]
发表于 2005-04-06 11:04 |只看该作者

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显


  1. char *p = strstr(str,"idle");
  2.        p = p - 6;
  3.        p[4] = '\0';
复制代码

strstr()找不到字符串时返回NULL,接下来的p[4]= '\0';会引起一个段错误。

论坛徽章:
0
3 [报告]
发表于 2005-04-06 11:08 |只看该作者

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显

kj501兄使用的是什么内核版本?我的是RH9自带的,已经确知proc文件中有这个“idle”串了。我执行倒是能出正确结果,就是不懂为什么输入不回显了

论坛徽章:
0
4 [报告]
发表于 2005-04-06 11:14 |只看该作者

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显

我用的是linux2.6

论坛徽章:
0
5 [报告]
发表于 2005-04-06 11:18 |只看该作者

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显

strace看看。system要等待子进程结束才会继续执行。
我这里把有问题的部分注释掉后,等一会儿程序就执行完了。

论坛徽章:
0
6 [报告]
发表于 2005-04-06 11:40 |只看该作者

帮忙看看这个小程序出什么问题了:-) 执行后bash输入不再回显

原帖由 "kj501" 发表:
strace看看。system要等待子进程结束才会继续执行。


问题应该是出在这里,system打开一个shell,执行“top|head >; aa.txt”串。如果只执行top,那就永远不返回,top是过一段时间刷新一次标准输出,但是用管道重定向到head程序后,一会儿就返回了,看来是他们之间的协作、管道、shell之间的关系把问题弄复杂了。

有时间俺再搞清楚,先不偷懒调用system了,直接读/proc/stat。谢谢kj501兄长
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP