程序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()) < ) {
perror("fork failue.");
}
printf("pid = %d\n", pid); // 打印子父进程的获得的返回值
if (pid == ) {
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(-, &stat, ); // 等待任意子进程结束
if (WIFEXITED(stat)) { // 状态字拥有24位,一些宏函数对状态字进行解释
printf("rpid = %d, stat = %d\n", rpid, WEXITSTATUS(stat));
}
}
return ;
}

程序A

#include <stdio.h>

int main(int argc, char **argv) {
printf("hello world.\n");
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

最新文章

  1. [No000094]SVN学习笔记4-版本库概念与部分日常操作
  2. PHP进程通信基础——信号
  3. 产经新闻:公交WiFi这次能扛多久
  4. ubuntu15.10安装搜狗拼音输入法
  5. javaScript的简单学习
  6. android 在线升级借助开源中国App源码
  7. Lambda表达式之Python
  8. fastjson生成和解析json数据
  9. MFC中树控件CTreeCtrl的用法
  10. wx
  11. java中从含反斜杠路径截取文件名的方法
  12. 微信小程序之快速接入七牛云
  13. VUE依赖webpack分别给开发环境和生产环境配置不同的常量值并在项目中动态引用
  14. Hadoop - 国内各站点最高温度、气压和风速统计
  15. js 抓取屏幕宽度设置字体大小 rem
  16. mqtt推送介绍
  17. 学习ASP.NET Core Razor 编程系列八——并发处理
  18. 像使用数据库一样使用xml
  19. 解决laravel使用QQ邮箱发邮件失败
  20. java栈的实现复习

热门文章

  1. FORTRAN 90标准函数(一) (转)
  2. tar压缩
  3. kali 下文件操作
  4. 日志时间格式有s,ms,us,如何排序最大10行
  5. ORACLE设置id自增长
  6. YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
  7. Qt Creator pro 文件 导入vs2013碰到的问题
  8. 依赖注入(DI)和Ninject,Ninject
  9. System.map文件【转】
  10. &lt;Interview Problem&gt;最小的“不重复数”