zoukankan      html  css  js  c++  java
  • linux编程中接收主函数返回值以及错误码提示

    程序A创建子进程,并调用进程B,根据不调用的不同情况,最后显示结果不同。

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <errno.h>
    
    
    int main() {
        pid_t pid, rpid;
        int stat;
        if ((pid = fork()) < 0) {
            perror("fork failue.");
        }
        printf("pid = %d
    ", pid); // 打印子父进程的获得的返回值
        if (pid == 0) {
            int x = execl("./test123", "./test", NULL);
            printf("x = %d
    ", x); // execl调用失败返回-1
            perror("execl failue"); // 直接使用perror函数输出错误字符串(相比数字,字符串更容易理解)
            printf("%s
    ", strerror(errno)); // 间接使用strerror输出错误字符串
        } else {
            rpid = waitpid(-1, &stat, 0); // 等待任意子进程结束
            if (WIFEXITED(stat)) { // 状态字拥有24位,一些宏函数对状态字进行解释
                printf("rpid = %d, stat = %d
    ", rpid, WEXITSTATUS(stat));
            }
        }
        return 0;
    }
    程序A
    #include <stdio.h>
    
    int main(int argc, char **argv) {
        printf("hello world.
    ");
        exit(0x3244); // return与exit均能正常返回,返回值为 int & 0xff
    }
    程序B

    调用成功后:

    liuxu@kylin:~/projects/webserver$ ./ptest
    pid = 4723
    pid = 0
    hello world.
    rpid = 4723, stat = 68

    调用失败后:

    liuxu@kylin:~/projects/webserver$ ./ptest
    pid = 4738
    pid = 0
    x = -1
    execl failue: No such file or directory
    No such file or directory
    rpid = 4738, stat = 0

    PS:error码含义,来自网络http://hi.baidu.com/henfengduandie/item/7c06bdb8e3a617f362388eb6

    errno.00 is: Success    成功
    errno.01 is: Operation not permitted         不允许此类操作
    errno.02 is: No such file or directory         没有此文件或目录
    errno.03 is: No such process                    没有此进程
    errno.04 is: Interrupted system call           中断系统调用
    errno.05 is: Input/output error                   输入输出错误
    errno.06 is: No such device or address    没有此设备或地址
    errno.07 is: Argument list too long            参数过长
    errno.08 is: Exec format error                   执行格式错误
    errno.09 is: Bad file descriptor                  无效的文件描述符
    errno.10 is: No child processes                 不存在子进程
    errno.11 is: Resource temporarily unavailable   资源暂时不可用
    errno.12 is: Cannot allocate memory         分配内存失败
    errno.13 is: Permission denied                   权限错误
    errno.14 is: Bad address                           地址错误
    errno.15 is: Block device required             块设备请求
    errno.16 is: Device or resource busy         设备或资源忙
    errno.17 is: File exists                                文件已经存在
    errno.18 is: Invalid cross-device link          无效的交叉连接设备
    errno.19 is: No such device                       没有此设备
    errno.20 is: Not a directory                        不是一个目录
    errno.21 is: Is a directory                           是一个目录
    errno.22 is: Invalid argument                     参数非法
    errno.23 is: Too many open files in system    系统打开文件太多
    errno.24 is: Too many open files               打开文件太多
    errno.25 is: Inappropriate ioctl for device          设备部支持该操作
    errno.26 is: Text file busy                           文本文件忙
    errno.27 is: File too large                           文件太大
    errno.28 is: No space left on device            设备没有空间,一般为存储设备
    errno.29 is: Illegal seek                               非法的seek操作
    errno.30 is: Read-only file system               只读文件系统
    errno.31 is: Too many links                         太多连接
    errno.32 is: Broken pipe                              管道破裂
    errno.33 is: Numerical argument out of domain          数值参数超出取值范围
    errno.34 is: Numerical result out of range                  数值结果超出取值范围
    errno.35 is: Resource deadlock avoided                   资源死锁
    errno.36 is: File name too long                        文件名太长
    errno.37 is: No locks available                         没有可用的锁
    errno.38 is: Function not implemented            函数没有执行
    errno.39 is: Directory not empty                      目录非空
    errno.40 is: Too many levels of symbolic links 太多级符号连接
    errno.41 is: Unknown error 41                         41未知错误
    errno.42 is: No message of desired type         不被接受的消息类型
    errno.43 is: Identifier removed                        标识符已被删除
    errno.44 is: Channel number out of range     。。。
    errno.45 is: Level 2 not synchronized
    errno.46 is: Level 3 halted
    errno.47 is: Level 3 reset
    errno.48 is: Link number out of range
    errno.49 is: Protocol driver not attached
    errno.50 is: No CSI structure available
    errno.51 is: Level 2 halted
    errno.52 is: Invalid exchange
    errno.53 is: Invalid request descriptor
    errno.54 is: Exchange full
    errno.55 is: No anode
    errno.56 is: Invalid request code
    errno.57 is: Invalid slot
    errno.58 is: Unknown error 58
    errno.59 is: Bad font file format
    errno.60 is: Device not a stream
    errno.61 is: No data available
    errno.62 is: Timer expired
    errno.63 is: Out of streams resources
    errno.64 is: Machine is not on the network
    errno.65 is: Package not installed
    errno.66 is: Object is remote
    errno.67 is: Link has been severed
    errno.68 is: Advertise error
    errno.69 is: Srmount error
    errno.70 is: Communication error on send
    errno.71 is: Protocol error
    errno.72 is: Multihop attempted
    errno.73 is: RFS specific error
    errno.74 is: Bad message
    errno.75 is: Value too large for defined data type
    errno.76 is: Name not unique on network
    errno.77 is: File descriptor in bad state
    errno.78 is: Remote address changed
    errno.79 is: Can not access a needed shared library
    errno.80 is: Accessing a corrupted shared library
    errno.81 is: .lib secion in a.out corrupted
    errno.82 is: Attempting to link in too many shared libraries
    errno.83 is: Cannot exec a shared library directly
    errno.84 is: Invalid or incomplete multibyte or wide character
    errno.85 is: Interrupted system call should be restarted
    errno.86 is: Streams pipe error
    errno.87 is: Too many users
    errno.88 is: Socket operation on non-socket
    errno.89 is: Destination address required
    errno.90 is: Message too long
    errno.91 is: Protocol wrong type for socket
    errno.92 is: Protocol not available
    errno.93 is: Protocol not supported
    errno.94 is: Socket type not supported
    errno.95 is: Operation not supported
    errno.96 is: Protocol family not supported
    errno.97 is: Address family not supported by protocol
    errno.98 is: Address already in use
    errno.99 is: Cannot assign requested address
    errno.100 is: Network is down
    errno.101 is: Network is unreachable
    errno.102 is: Network dropped connection on reset
    errno.103 is: Software caused connection abort
    errno.104 is: Connection reset by peer
    errno.105 is: No buffer space available
    errno.106 is: Transport endpoint is already connected
    errno.107 is: Transport endpoint is not connected
    errno.108 is: Cannot send after transport endpoint shutdown
    errno.109 is: Too many references: cannot splice
    errno.110 is: Connection timed out
    errno.111 is: Connection refused
    errno.112 is: Host is down
    errno.113 is: No route to host
    errno.114 is: Operation already in progress
    errno.115 is: Operation now in progress
    errno.116 is: Stale NFS file handle
    errno.117 is: Structure needs cleaning
    errno.118 is: Not a XENIX named type file
    errno.119 is: No XENIX semaphores available
    errno.120 is: Is a named type file
    errno.121 is: Remote I/O error
    errno.122 is: Disk quota exceeded
    errno.123 is: No medium found
    errno.124 is: Wrong medium type
    errno.125 is: Operation canceled
    errno.126 is: Required key not available
    errno.127 is: Key has expired
    errno.128 is: Key has been revoked
    errno.129 is: Key was rejected by service
    errno.130 is: Owner died
    errno.131 is: State not recoverable
    errno.132 is: Unknown error 132
    132-255全是Unknown error

  • 相关阅读:
    【队列应用一】随机迷宫|随机起点终点*最短路径算法
    【堆栈应用二】迷宫算法,可直接动态运行
    【堆栈应用一】一个数divided=几个最小质因数的乘积(时间复杂度On)
    MyEclipse2014中Java类右键Run as没有JUnit Test
    C++中break/Continue,exit/return的理解
    windows下用C++修改本机IP地址
    windows下注册表的操作
    详解Java的Spring框架中的注解的用法
    什么是Java Bean
    JS windows对象的top属性
  • 原文地址:https://www.cnblogs.com/Lyush/p/3737203.html
Copyright © 2011-2022 走看看