linux C使用strerror来追查错误信息
Posted 聚沙成塔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]\n", (void *)&main); if(argc != 3) { printf("parameter error! \n usage: \t %s old_fileName new_fileName\n", argv[0]); return 1; } extern int errno; if(rename(argv[1], argv[2])) { printf("%s:%s:%d:|errno is [%d] msg is [%s]\n",__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\n",__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将文件挪走。
上面的日志,实际上,我是用两个程序去测试得到的不同的分支的提示。
以上是关于linux C使用strerror来追查错误信息的主要内容,如果未能解决你的问题,请参考以下文章
C/C++ Linux 出错处理函数(strerror 与 perror)