LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 891|回复: 3

我有一个编程练习题,已经调试出了大量错误。但是还是有一个不知道怎么错了[已解决]

[复制链接]
发表于 2007-9-24 23:04:35 | 显示全部楼层 |阅读模式
这是《unix/linux编程实践教程》里边的一个练习题,在61页2.13题。
该程序模拟用户注销的时候对utmp文件的操作动作
通过动手,我学会了简单的使用gdb。
GDB非常好用。通过调试,找到了大量的错误。但是还是有一个错误怎么调试也不知道错在哪里。
errno显示是9,也就是坏掉的文件描述符。在调用write的时候出现的。
希望诸位高手帮我看一下到底错在哪里了?
谢谢.
由于白天上学,所以明天晚上,我会上线回复。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-9-25 08:15:15 | 显示全部楼层

原来那个压缩的不好。这里有rar版本,重新压缩过的。

原来那个压缩的不好。这里有rar版本,重新压缩过的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-25 08:44:50 | 显示全部楼层
找到了一段可疑的代码,目前在学校机房没有测试环境(全是windows!)
似乎是那些*号和(sizeof(struct utmp))太近了?可能被认为是指针?

  1. int utmp_seek(int fd,off_t dist,int base)
  2. {
  3.         switch(base)
  4.                     {
  5.          case SEEK_SET:
  6.          return lseek(fd,dist *(sizeof(struct utmp)),SEEK_SET);
  7.          break;

  8.          case SEEK_CUR:
  9.          return lseek(fd,dist *(sizeof(struct utmp)),SEEK_CUR);
  10.          break;

  11.          case SEEK_END:
  12.          return lseek(fd,dist *(sizeof(struct utmp)),SEEK_END);
  13.          break;

  14.          default:
  15.          return -1;
  16.                         
  17.                   }

  18. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-25 19:57:16 | 显示全部楼层
找到问题了。原来是原书的代码直接使用有问题
文件描述符是只读打开的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表