歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux編程中接收主函數返回值以及錯誤碼提示

程序A創建子進程,並調用進程B,根據不調用的不同情況,最後顯示結果不同。

程序A:

#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\n", pid); // 打印子父進程的獲得的返回值
    if (pid == 0) {
        int x = execl("./test123", "./test", NULL);
        printf("x = %d\n", x); // execl調用失敗返回-1
        perror("execl failue"); // 直接使用perror函數輸出錯誤字符串(相比數字,字符串更容易理解)
        printf("%s\n", strerror(errno)); // 間接使用strerror輸出錯誤字符串
    } else {
        rpid = waitpid(-1, &stat, 0); // 等待任意子進程結束
        if (WIFEXITED(stat)) { // 狀態字擁有24位,一些宏函數對狀態字進行解釋
            printf("rpid = %d, stat = %d\n", rpid, WEXITSTATUS(stat));
        }
    }
    return 0;
}

程序B:

#include <stdio.h>

int main(int argc, char **argv) {
    printf("hello world.\n");
    exit(0x3244); // return與exit均能正常返回,返回值為 int & 0xff
}

調用成功後:

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碼含義

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

Copyright © Linux教程網 All Rights Reserved