前段时间在部署代码的时候,发现一个比较“诡异”的问题
相同的环境下(CentOs 6.5),开发说在其本机的虚拟机中测试是正常的,部署到正式环境中时,就会出现问题。相同的函数,总是执行失败。在另一台测试也是完全正常
开发说是服务器安装的原因,来来回回安装了N次。真TM郁闷
然后又说是权限的问题,包的问题,自己安装,服务器拿回家升级,重买服务器、这个拿回去给他妈用等等等等……我都懒的理他
首先说权限问题,我说跟测试正常的那台机器完全相同,说不行,好吧,给你777
又说是包没安装,我说那个包,说不知道,…
折腾了几天都没安装好,又说打扰他思路,哥是dba,不是sa,也是无语了
解决:
最后因为快要上线的缘故,实在没办法,拿过他的代码查看,看看能否找到点原因,确信的是包、权限没有任何问题。个人觉得就是代码的问题(这哥们常说的话就是:不要怀疑我的代码)
关键在打出的日志中也看不出任何有效地信息,只是返回了函数执行失败值-1,完全没有任何价值。
在linux系统编程 中文版.pdf中查看了有关他使用到的函数
#include<stdio.h> Intmain (const char *oldpath,const char *newpath);
成功调用rename()会将路径名oldpath重命名为newpath,文件内容和iNode保持不变,oldpath必须和newpath位于同一文件系统,否则会调用失败。
而且还可以设置errno进行逐步排错,以下是errno的相关解释
这才是重点,这样基本也就解决了出现的问题,要是在出现错误的时候,设置了errno,对于查找问题也是非常有帮助的。
因为程序的运行时,oldpath和 newpath完全是在不同的文件系统下,其实也就是分区不同
oldpath位于/home/test ----/dev/sda1
newpath位于/var/www/photo ----/dev/sda3
于是修改了程序中的两个路径,改为在相同的分区下,ok,问题解决
这次问题的出现,个人觉得是开发没有完全明白rename函数,只是知道有这个用法,可以用,但是却不知道需要注意的事项。
解决问题的时候,思路一定要明确,针对出现的问题一个一个进行排除,肯定可以解决!