zoukankan      html  css  js  c++  java
  • linux C使用strerror来追查错误信息

      最近工作中有个需求:程序将文件进行处理,然后将处理完毕的文件挪走。我用了rename函数来挪动文件,可是在docker化的环境中,文件却无法挪动。不知道什么原因。现在,对程序进行调整,如果rename来挪动文件失败,那么打印错误信息,同时使用另外一个办法将其挪走。以下是简化后的代码。
      这个程序演示了rename(),strerror(),system()函数的用法。
      备考:

    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    
    int main(int argc, char ** argv)
    {
    	printf("process begin at [%p]
    ", (void *)&main);
    
    	if(argc != 3)
    	{
    		printf("parameter error! 
     usage: 	 %s old_fileName new_fileName
    ", argv[0]);
    		return 1;
    	}
    
    	extern int errno;
    
    	if(rename(argv[1], argv[2]))
    	{
    		printf("%s:%s:%d:|errno is [%d] msg is [%s]
    ",__FILE__, __FUNCTION__,__LINE__,errno, strerror(errno));
    
    		char cmd[1000] = {0};
    		sprintf(cmd,"%s %s %s", "mv",argv[1], argv[2]);
    		system(cmd);
    	}
    	else
    	{
    		printf("%s:%s:%d:|mv: from [%s] to [%s] ok
    ",__FILE__, __FUNCTION__,__LINE__,argv[1], argv[2]);
    	}
    
    	return 0;
    }
    

     正常的程序,打印的日志为:
    process begin at [0x4006b0]
    renamefile.c:main:27:|mv: from [renametest] to [renametest2] ok


    docker化的程序,打印的日志为:
    fileRename|DCCalcFmtBase.cpp|errno is [18] msg is [Invalid cross-device link]
    docker化的程序,就算有上面的错误提示,也会使用system函数,去调用mv将文件挪走。
    上面的日志,实际上,我是用两个程序去测试得到的不同的分支的提示。

  • 相关阅读:
    python链家网高并发异步爬虫and异步存入数据
    python爬取百度文库所有内容
    PyQt5+requests实现车票查询工具
    python黑科技库:FuckIt.py,让你代码从此远离bug
    教你如何使用Python写游戏辅助脚本
    python实现定时发送qq消息
    Python利用带权重随机数解决抽奖和游戏爆装备问题
    Beta冲刺随笔集合
    用户调查报告
    Beta冲刺总结
  • 原文地址:https://www.cnblogs.com/babyha/p/7700899.html
Copyright © 2011-2022 走看看