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将文件挪走。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值