新手第一课:fopen(), fclose()和segmentation fault(Linux 权限问题)

昨天晚上开始学习Linux C,看书看了好一会突然想上手练习,于是就想到要写个逆波兰算法的解析程序: 通过从文件中读出计算式,每行一个计算式,每次计算后,输出结果!

 

程序其实是一个分析读取信息以及堆栈操作,很容易就搞定,用GCC编译也是很顺利,但是结果运行的时候确实出现了问题,程序报一个"Segmentation fault" 的错误,再次查看代码,以及使用gdb调试,都没有发现问题所在(小弟菜鸟,gdb基本不怎么会用)!于是出绝招,吧把代码一步步注释掉,结果发现fclose()的问题!但是那个时候代码就一个fopen()和一个fclose(), 看了半天都没有明白是什么问题!

 

上网查了下,发现很多人出现这个问题,但是没有一个和我的相似,无奈查找到凌晨1点,没有找到答案,网络又突然断掉就休息,第二天为了这个简单的问题继续,把代码中文件的打开加上详细的判断,发现每次拿到的文件指针都是空的,用ls -l了下发现所操作的文件的权限不对,把权限改过来,马上程序OK了!

 

总结: Linux 下对文件操作必须非常小心,要非常注意文件的权限, 同时fclose()的时候如果文件指针是空,就会报"segmentation fault"的错误!(第二天到公司,和高手讨论了下得到的结果),而且在处理文件指针的时候要多加以判断:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值