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\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;
}

程序A

#include <stdio.h>

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

程序B

调用成功后:

[email protected]:~/projects/webserver$ ./ptest
pid = 4723
pid = 0
hello
world.
rpid = 4723, stat = 68

调用失败后:

[email protected]:~/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

linux编程中接收主函数返回值以及错误码提示,布布扣,bubuko.com

时间: 2024-08-02 02:44:59

linux编程中接收主函数返回值以及错误码提示的相关文章

swift 中不使用函数返回值

在该函数前添加 @discardableResult  即可,例如 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-heigh

Linux Shell函数返回值

转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回.示例: [javascript] view plain copy print? #!/bin/bash - function mytest() { echo "arg1 = $1" if [ $1 = &q

C语言中函数返回值的问题

c语言中有关于在函数返回值的问题,在函数中的局部变量主要是在栈上开辟的,出了函数变量就被回收了,针对函数返回值得问题,给出下面几个比较具体的例子来说明: 函数返回值是在函数中定义的局部变量 这类型的返回值在主函数中是可以使用的,因为返回局部变量值得时候,返回的是值得一个副本,而在主函数中我们需要的也只是这个值而已,因此是可以的,例如 int fun(char *arr) { int num = 0; while (*arr != '\\0') { num = num * 10 + *arr -

Python函数中的变量和函数返回值

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x   //声明 x +=1 print x fun() print x 外部变量被改: x = 100 de

string 中的 length函数 和size函数 返回值问题

string 中的 length函数 和 size函数 的返回值  (  还有 char [ ] 中 测量字符串的  strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 比较. 应尽量避免 unsigned int 类型 和 int类型 数据 的比较 .当unsigned int 类型 和 int类型 数据 比较 时 ,会 把int 类型 转换 为 unsigned int类型 .如果 int是负数 ,转换 为 unsigned int 会是 一个 很大 的正整数

Golang中interface{}作为函数参数和函数返回值的使用

package main import (     "errors"     "fmt" ) type item struct {     Name string } func (i item) String() string {     return fmt.Sprintf("item name: %v", i.Name) } type person struct {     Name string     Sex  string } func

Linux system函数返回值

例: [cpp] view plain copy status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值 (2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值. 2.如何正确判断test.sh是否正确执行? 仅判断status是否==0?或者仅判断status是否!=-1? 都错! 3.

Python函数中的变量和函数返回值的使用实例

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x //声明 x +=1 print x fun() print x 外部变量被改: x = 100 def

GetLastError()函数返回值及含义

GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值,也不能担保函数已成功执行.只有在函数调用返回一个错误结果时,这个函数指出的错误结果才是有效的.通常,只有在函数返回一个错误结果,而且已知函数会设置GetLastError变量的前提下,才应访问GetLastError:这时能保证获得有效的结果.(来源:百度百科) 在进行windows网络编程时,可以