码迷,mamicode.com
首页 > 系统相关 > 详细

Linux下c编程rename函数导致的问题

时间:2015-08-05 22:39:31      阅读:720      评论:0      收藏:0      [点我收藏+]

标签:linux 、c开发、c语言、rename函数、文件系统

  前段时间在部署代码的时候,发现一个比较“诡异”的问题

相同的环境下(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函数,只是知道有这个用法,可以用,但是却不知道需要注意的事项。  

解决问题的时候,思路一定要明确,针对出现的问题一个一个进行排除,肯定可以解决!

本文出自 “相守姑娘说” 博客,请务必保留此出处http://sugarlovecxq.blog.51cto.com/6707742/1681973

Linux下c编程rename函数导致的问题

标签:linux 、c开发、c语言、rename函数、文件系统

原文地址:http://sugarlovecxq.blog.51cto.com/6707742/1681973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!