免费注册 查看新帖 |

Chinaunix

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

请问readline()和fgets()的区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-30 21:19 |只看该作者 |倒序浏览
(linux下)本人做一个简单命令解释器,用fgets()读入命令可以完全正常执行,改用readline库以后,遇到 ls | grep sh这类命令就出现段错误,有时候运行前一两次正常,第三次就出错了。
运行后台进程&的运行也有问题,用fg命令把后台进程移到前台时,bash的输入看不见了。。。奇怪的很
大家帮帮忙吧,不知道readline()和fgets()之间有什么区别,应注意些什么?

代码:
                                if(command)
                                {
                                        free(command);
                                        command = (char *)NULL;
                                }
                                command = readline("myshell>>");
                                command[strlen(command)] = '\0';

                               nextCommand = command;
                上面是使用readline ^      下面是fgets:
    if (!fgets(command, MAX_COMMAND_LEN, stdin)) {
         …………
    }
    command[strlen(command) - 1] = '\0';



不知道这两个command有什么不同?

[ 本帖最后由 foollan 于 2007-5-30 21:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-30 21:23 |只看该作者
貼上一段能說明問題的代碼。

论坛徽章:
0
3 [报告]
发表于 2007-05-30 21:37 |只看该作者
  1.     if (!fgets(command, MAX_COMMAND_LEN, source)) {
  2.         if (source == stdin) printf("\n");
  3.         return 1;
  4.     }

  5.     /* remove trailing newline */
  6.     command[strlen(command) - 1] = '\0';
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-05-30 21:52 |只看该作者
command[strlen(command)] = '\0';
除了這句在readline時多余之外,沒看到什麼問題。
你就調試一下啊,至少可以把這些值都printf出來。

论坛徽章:
0
5 [报告]
发表于 2007-05-31 13:33 |只看该作者
有谁帮下忙不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP