最近工作中有个需求:程序将文件进行处理,然后将处理完毕的文件挪走。我用了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来追查错误信息的更多相关文章

  1. linux服务器无法显示tomcat详细错误信息

    严重: One or more listeners failed to start. Full details will be found in the appropriate container l ...

  2. Linux bash 中,如何将正常信息和错误信息输出到文件

    问题描述: $ command 2>> error $ command 1>> output 是否有方法,在bash同一行,实现输出stderr到error文件,输出stdou ...

  3. Linux提供两个格式化错误信息的函数

    #include “stdio.h” Void perror(__const char *__s); 其中__s是出现错误的地方,函数向标准错误输出设备输出如下:s:错误的详细信息. Eg.perro ...

  4. C++输出错误信息perror、strerror以及全局变量errno

    头文件:#include<stdio.h>函数:perror.strerror,全局变量:errno.使用方法: FILE *fp; if((fp = fopen("test.t ...

  5. 【C/C++】Linux下system()函数引发的错误

    http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:3 ...

  6. 聊聊、Nginx 初始化错误信息

    这篇文章我们继续学习 main 方法,我们先来看看 ngx_debug_init() 这个方法. 从方法名我们也知道,debug初始化.我们先看看方法位置在哪.我们来断点在这个方法上面. Functi ...

  7. php 错误信息配置

    display_errors = on/off错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项.错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利.推荐关闭此选项. ...

  8. Linux 如何使用gdb 查看core堆栈信息

    转载:http://blog.csdn.net/mergerly/article/details/41994207 core dump 一般是在segmentation fault(段错误)的情况下产 ...

  9. linux系统/var/log目录下的信息详解

    一./var目录 /var 所有服务的登录的文件或错误信息文件(LOG FILES)都在/var/log下,此外,一些数据库如MySQL则在/var/lib下,还有,用户未读的邮件的默认存放地点为/v ...

随机推荐

  1. 2018 Multi-University Training Contest 1 - D Distinct Values (STL+双指针)

    题意:数量为N的序列,给定M个区间,要求对每个区间Li,Ri,都有al..r (l≤i<j≤r), ai≠aj.构造这个序列使其字典序最小. 分析:如果对于每个所给区间都暴力扫一遍,1e5的数据 ...

  2. centos7 firewall开放查看关闭端口

    查看所有打开的端口: firewall-cmd --zone=public --list-ports 添加 firewall-cmd --zone=public --add-port=80/tcp - ...

  3. oracle 任务使用

    文章访问地址:http://www.cnblogs.com/hoojo/p/oracle_procedure_job_interval.html

  4. mysql的常用语句

    Mysql的常用语句 -- 创建表 create table tableName( id int primary key, name varchar(20) ) -- 查询 select * from ...

  5. 黑苹果Yosemite 10.10.1懒人版完美安装及简单驱动设置

    1.硬件概要 CPU: 英特尔 Xeon E3-1230 V2 (四核)主板: 技嘉 H77-DS3H (Intel H77 (Panther Point Base))内存: 8 GBytes显卡: ...

  6. 源码编译配置lnmp部署zabbix

    环境说明: [root@wcy ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@wcy ~]# uname -a Linux ...

  7. Spring boot 与mybatis 多数据源问题

    https://www.cnblogs.com/ityouknow/p/6102399.html Spring Boot 集成Mybatis实现多数据源 https://blog.csdn.net/m ...

  8. tyvj 1091 等差数列 dp

    P1091 等差数列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 广东汕头聿怀初中 Train#3 Problem 3 描述 等差数列的定义是一个数列S, ...

  9. 带你彻底明白 Android Studio 打包混淆

    前言 在使用Android Studio混淆打包时,该IDE自身集成了Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单.只需要在工程应用目录的gradle文件 ...

  10. 51nod-1385-贪心-构造

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1385 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 ...