用C语言从零实现一个shell终端

2.8万
26
2022-10-10 14:17:07
正在缓冲...
915
504
1986
145
linux环境下用C写一个shell,麻雀虽小,五脏俱全,支持内置命令以及ls ,cd , vim 等等命令。 录制视频的时候,有一些点忘记了,当时没有给大家讲清楚,特地来这里阐述一下。 pid_t waitpid(pid_t pid,int *status,int options); 成功:返回等待的子进程ID;失败:-1 我们在options字段里,使用了WUNTRACED,意思是若子进程进入暂停状态,则马上返回,但子进程的结束状态不予以理会。 我们对于状态码的判断,是写在这个while循环里的 while(!WIFEXITED(status) && !WIFSIGNALED(status)) 其中: 1. WIFEXITED(status) 若此值为非0 表明进程正常结束。 若上宏为真,此时可通过WEXITSTATUS(status)获取进程退出状态(exit时参数) 2. WIFSIGNALED(status)为非0 表明进程异常终止。 若上宏为真,此时可通过WTERMSIG(status)获取使得进程退出的信号编号 我们这里可以改写一下我们的while循环 while(!WIFEXITED(status) && !WIFSIGNALED(status)) 等价于 while(!(WIFEXITED(status) || WIFSIGNALED(status))) 若想要while循环继续执行 则需要!(WIFEXITED(status) || WIFSIGNALED(status))  = 1 也就是(WIFEXITED(status) || WIFSIGNALED(status)) = 0 说明 我们的子进程,没有正常终止,但是也没有异常终止,说明子进程仍在运行中 所以我们的父进程需要轮询等待。
戒骄戒躁,艰苦奋斗。 强化民主意识,培养科学精神。 为中华崛起而读书。
客服
顶部
赛事库 课堂 2021拜年纪