include/sys/ wait.h ioctl.h /minix/config.h sys_config.h const.h

本文涉及操作系统中的关键头文件,包括wait.h中的wait()和waitpid()函数,它们处理进程的终止和控制;ioctl.h涵盖I/O控制,特别是对tty、disk和memory的操作;/minix/config.h和sys_config.h揭示了Minix内核及其配置参数,区分用户和系统设置,并定义了机器类型如IBM和SUN;const.h提供了FORWARD和PRIVATE宏的静态类型声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 wait.h:  wait(),waitpid() 返回值取决于进程是否调用exit()来终止,还是被信号kill掉,或者因为作业控制而停止

 

ioctl.h,是处理I/O操作的头文件.主要控制tty,disk,memory,cmos.

 

 /minix/config.h:minix内核,FS,PM的配置参数,分两个部分:1,用户设置参数;2,基于用户设置参数的系统参数

                                  定义机器的类型,是IBM,SUN,ATARI,Macintosh.

 /minix/sys_config.h:为了不感染用户空间,编译一个最小的内核.

 const.h   :FORWARD PRIVATE 宏原型:static

 

 type.h:定义了内在映射结构体,用于local text,stack,data segments.

struct mem_map{

      vir_clicks mem_vir; //virtual address

      phys_clicks mem_phys; //physical address

     vir_clicks mem_len;   //length

};

还有其他结构体:kinfo:记录内核信息;

                      sigmsg:信号信息

                      iovec_t: I/O缓冲区信息

                      far_mem:memory map for remote memory areas

 

ipc.h:

   message结构体: 内置Union联合体,信号来源,类型.

 

### 关于 `sys/wait.h` 头文件缺失的问题 在 Linux 系统中,如果遇到编译器提示无法打开源文件 `sys/wait.h` 的问题,通常是因为开发环境配置不完整或缺少必要的库文件。以下是可能的原因及解决方案: #### 1. **确认头文件的实际位置** 在某些发行版中,`<sys/wait.h>` 文件的位置可能会有所不同。可以通过命令行工具查找该文件是否存在以及具体路径: ```bash find /usr/include -name "wait.h" ``` 如果未找到任何结果,则说明当前系统确实缺少此头文件。 #### 2. **安装必要的开发包** 很多情况下,`sys/wait.h` 是随 GNU C 库 (glibc) 开发包一起提供的。如果没有安装 glibc 的开发版本,就会导致找不到头文件的情况。可以尝试通过包管理器安装对应的开发包。例如,在基于 Debian 的系统上运行以下命令: ```bash sudo apt-get update && sudo apt-get install libc6-dev ``` 对于 Red Hat 或 CentOS 系统,可执行如下操作: ```bash sudo yum groupinstall "Development Tools" ``` #### 3. **验证编译器的 include 路径设置** 编译器默认会搜索 `/usr/include` 及其子目录中的头文件。但如果自定义了编译选项或使用了交叉编译工具链,可能导致编译器未能正确定位到标准库头文件。可以在编译时显式指定额外的 include 路径: ```bash gcc -I/usr/include your_program.c -o your_program ``` #### 4. **检查内核头文件的影响** 部分涉及底层功能的头文件(如 `<sys/types.h>` 和 `<sys/wait.h>`),依赖于特定版本的内核头文件。如果这些文件丢失或损坏,也可能引发类似的错误。可通过重新安装内核头文件修复这一问题: ```bash sudo apt-get install --reinstall linux-headers-$(uname -r) ``` #### 5. **替代方案:手动复制头文件** 若上述方法均不可行,还可以考虑从其他已知正常工作的环境中提取所需的头文件并放置到适当位置。不过需要注意的是,这种方法仅适用于临时解决问题,并不适合长期维护项目。 --- ### 示例代码片段 下面提供了一个简单的例子展示如何正确包含和使用 `<sys/wait.h>` 中的功能函数: ```c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> // 定义 pid_t 类型 [^1] #include <sys/wait.h> int main(void){ pid_t child_pid; printf("Parent process ID is %d\n", getpid()); if((child_pid = fork()) == -1){ // 创建子进程失败处理 perror("fork"); exit(EXIT_FAILURE); } if(child_pid == 0){ // 子进程中执行逻辑 printf("Child process running with PID=%d\n", getpid()); sleep(5); // 延迟一段时间以便观察父进程等待行为 _exit(EXIT_SUCCESS); }else{ // 父进程中继续执行 int status; wait(&status); // 使用 wait 函数阻塞直到某个子进程结束 if(WIFEXITED(status)){ printf("Child exited normally with code %d.\n", WEXITSTATUS(status)); }else{ printf("Child did not terminate properly!\n"); } } return EXIT_SUCCESS; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值