TCP 服务端的 socket、bind、listen、accept 分别改变什么状态?
socket 创建端点,bind 绑定本地地址端口,listen 让它成为监听 Socket 并设置排队提示,accept 从已完成连接队列取出一个新的已连接 Socket;监听 Socket 继续负责接收新连接。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
socket 创建端点,bind 绑定本地地址端口,listen 让它成为监听 Socket 并设置排队提示,accept 从已完成连接队列取出一个新的已连接 Socket;监听 Socket 继续负责接收新连接。
fork 创建调用进程的子进程,现代系统借助写时复制延后物理页复制;exec 用新程序映像替换当前进程但 PID 通常保持;父进程用 wait/waitpid 回收退出状态,避免子进程变成僵尸。
MAP_SHARED 的修改可对映射同一对象的参与者可见,并可按语义回写文件;MAP_PRIVATE 使用写时复制,修改只属于当前映射。两者都不自动提供多线程或多进程同步。
子进程已退出但父进程尚未 wait 回收时成为僵尸,只保留 PID 与退出信息;父进程先退出而子进程仍运行时成为孤儿,通常被系统指定的 Subreaper/PID 1 接管并最终回收。
read/write 应处理用户缓冲复制、部分传输、阻塞/非阻塞和返回字节数;是否使用并更新 `*ppos` 取决于设备语义。poll 只注册等待队列并返回当前就绪掩码,状态变化时驱动负责 wake_up。
文件描述符是进程表中的小整数,指向内核打开文件描述;dup/dup2 创建新的描述符引用同一打开文件表项,因此共享文件偏移和状态标志,但各描述符的 close-on-exec 标志可不同。
条件变量表示“状态可能变化”的通知,不保存业务条件本身;等待操作会原子释放互斥锁并睡眠,醒来后重新持锁。由于伪唤醒、多个消费者和状态被他人抢先改变,必须在 while 中再次检查谓词。
miscdevice 为简单设备封装了次设备号分配、Class 和注册流程,驱动主要提供 file_operations;完整 cdev 让驱动自行管理设备号、多个实例、Class/Device 和生命周期,控制更细。