很简单很简单,就是看不出来。身在庐山了。。。

dengnice 2011-02-08 11:17:49
代码(来源于APUE的程序清单3_3) 环境:Fedora 14.
这是简化后的,用GDB调试完后发现程序错误在val = fcntl(atoi(argv[1]),F_GETFL,0);这句执行完就出现program received signal SIGSEGV,segmentation fault.0x009a2874 in ____strtol_l_internal()from /lib/libc.so.6


#include<fcntl.h>
#include"apue.h"
#include"fun1.c"
int main(int argc,char argv[])
{
int val;
if(argc != 2)
{
err_quit("error!");
}
if((val = fcntl(atoi(argv[1]),F_GETFL,0)) < 0)
err_sys("fcntl error for fd %d",atoi(argv[1]));
exit(0);
}

希望各位不吝赐教,先谢过了!
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluejays 2011-02-09
  • 打赏
  • 举报
回复
在gdb里可以看argv[1]的值
(gdb) print argv[1]
bluejays 2011-02-09
  • 打赏
  • 举报
回复
argv的类型写错了,编译的时候没有警告吗?
int main(int argc,char *argv[])
xiangpengmeng 2011-02-09
  • 打赏
  • 举报
回复
没有谁知道atoi(argv[1])这个值会是什么?
argv的类型写错了,编译的时候没有警告吗?
int main(int argc,char *argv[])
dengnice 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluejays 的回复:]

在gdb里可以看argv[1]的值
(gdb) print argv[1]
[/Quote]
哦,没有结果,只是出现段错误。不好意思
dengnice 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiangpengmeng 的回复:]

没有谁知道atoi(argv[1])这个值会是什么?
argv的类型写错了,编译的时候没有警告吗?
int main(int argc,char *argv[])
[/Quote]
atoi(argv[1])的结果就是0,测试数据忘了说了,./main 0 < /dev/tty
dengnice 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluejays 的回复:]

在gdb里可以看argv[1]的值
(gdb) print argv[1]
[/Quote]
忘了说了,运行的命令带参数,./main 0 < /dev/tty
结果应该是read only .
dengnice 2011-02-08
  • 打赏
  • 举报
回复
哦,忘了说明下,fun1.c里面是各种错误的函数。跟这个程序没啥大关系。

23,221

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧