# 1. POSIX Base Definitions 中 locale 与 character classes 的概念模型,LC_CTYPE 与 LC_COLLATE 的优先级如何设定? A LC_CTYPE 优先级高于 LC_COLLATE,可覆盖其设置 B 各 LC_* 分类之间会互相覆盖,无法独立设置 C LC_COLLATE 优先级最高,决定字符分类 D LC_ALL 具有最高优先级,覆盖所有 LC_* 分类 ✓ 正确答案
# 2. POSIX 标准的 POSIX 选项(_POSIX_*_VERSION、_XOPEN_*)与 XSI 选项在编译期如何判断,缺失时的兼容写法是什么? A feature test macro 可在任何头文件之后定义 B feature test macro 只影响运行期,不影响编译期 C 编译期用 `#if _POSIX_VERSION >= 200809L` 判断版本,缺失时用条件编译回退 ✓ 正确答案 D _XOPEN_SOURCE 与 _POSIX_C_SOURCE 完全等价,可任意互换
# 3. POSIX message catalogs(catgets)与 GNU gettext 的字符串外部化机制差异是什么? A catgets 以原文字符串为键,gettext 以编号为键 B catgets 比 gettext 更新,功能更强大 C 两者都以 C 语言注释为键,机制完全相同 D gettext 以原文字符串为键,翻译缺失时回退原文,可维护性更好 ✓ 正确答案
# 4. POSIX wide character 与 multibyte character 之间的转换接口 mbrtowc、wcrtomb 状态机如何管理? A 转换状态为 NULL 时使用静态状态,可安全跨线程使用 B 返回 (size_t)-2 表示输入不足,需保留状态继续读取 ✓ 正确答案 C 返回 (size_t)-1 表示转换成功并输出宽字符 D mbstate_t 只能用于 UTF-8,无法处理其他编码
# 5. 当跨语言处理正则时(如 PCRE、RE2、Python re)语义差异导致的安全漏洞(redos)的检测方法? A 回溯式引擎对嵌套量词模式可能指数退化,可用超时或无回溯引擎(RE2)防护 ✓ 正确答案 B 所有正则引擎都保证线性匹配时间,不存在 ReDoS C ReDoS 只与性能无关,只需限制输入长度即可完全避免 D 静态分析能 100% 识别所有 ReDoS 模式,无需运行时防护
# 6. POSIX blkcnt_t、fsblkcnt_t、fsfilcnt_t 在大文件系统(>2^32 块)下的溢出风险? A 32 位 blkcnt_t 在块数超过 2^31 时可能溢出,应启用 `_FILE_OFFSET_BITS=64` ✓ 正确答案 B blkcnt_t 永远是 64 位,不存在溢出风险 C fsblkcnt_t 只用于统计文件数,与容量无关 D 溢出只影响显示,不影响内核实际写入
# 7. POSIX pthread_attr_t 在不同实现下的内存布局(glibc vs musl)为何导致跨平台二进制兼容性问题? A pthread_attr_t 在所有 libc 中布局完全相同,可安全跨库传递 B 可以通过直接读取 pthread_attr_t 内部字段提高性能 C pthread_attr_t 是不透明类型,不同 libc 布局不同,应通过 init/get/set 函数访问 ✓ 正确答案 D 跨 libc 传递 pthread_attr_t 是安全的,因为标准规定其大小
# 8. __STRICT_ANSI__ 宏在 GCC 与 Clang 下限制扩展接口的范围,对嵌入式交叉编译的影响? A 定义 __STRICT_ANSI__ 会启用更多 POSIX 扩展接口 B 嵌入式交叉编译必须使用严格 ANSI 模式,否则无法编译 C __STRICT_ANSI__ 只影响编译器内部优化,不影响头文件 D 严格 ANSI 模式(如 -std=c99)定义 __STRICT_ANSI__,会抑制 POSIX 扩展接口声明 ✓ 正确答案
# 9. POSIX fork、exec、wait、exit 四个接口族的语义约束,为何 sigaction 必须 POSIX 信号安全? A 所有 POSIX 函数都可安全地在信号处理器中调用 B sigaction 等信号管理函数是 async-signal-safe,可在信号处理器中安全调用 ✓ 正确答案 C malloc 与 printf 在信号处理器中调用是安全的 D fork 后信号处置与父进程完全相同,执行会保留在子进程里被捕获的信号
# 10. POSIX sem_init、sem_open、sem_timedwait 的进程内 vs 跨进程行为,robust semaphore 的归属? A sem_init 创建的信号量天然可跨进程共享,无需共享内存 B sem_init 的 pshared 参数与共享内存无关 C robust semaphore 用于取消持锁者,防止死锁 D sem_open 创建命名信号量,用于跨进程,sem_timedwait 超时返回 ETIMEDOUT ✓ 正确答案
# 11. POSIX spawn 接口(posix_spawn)相比 fork+exec 的可移植优势与功能差异? A posix_spawn 比 fork+exec 复制更多内存,开销更大 B posix_spawn 将创建与替换合并为原子操作,适合无 MMU 环境,开销更低 ✓ 正确答案 C posix_spawn 无法指定文件描述符重定向 D posix_spawn 与 fork+exec 在功能上完全等价,无差异
# 12. POSIX timer_create / timer_settime 的回调线程与线程取消交互在 Linux 上的具体行为? A SIGEV_THREAD 创建专用线程执行回调,回调线程可能被取消点取消,需用 pthread_cleanup 清理 ✓ 正确答案 B SIGEV_THREAD 的回调在信号处理器中执行,无需线程 C 回调线程永远无法被取消 D timer_create 只能发送信号,无法在线程中回调
# 13. POSIX link、unlink、rename、remove 在不同文件系统(跨设备)上的返回码语义? A link 与 rename 跨设备都能正常完成,无需处理 EXDEV B remove 只能删除文件,无法删除目录 C unlink 被打开的文件必然立即报错 D rename 在同文件系统内是原子的,跨设备返回 EXDEV,需回退 copy+unlink ✓ 正确答案
# 14. POSIX fstatvfs、statvfs 与 statfs 在不同系统下的字段兼容性如何诊断? A statvfs 与 statfs 字段完全相同,可互换 B statvfs 是 POSIX 接口,f_frsize 表示实际最小块,f_bsize 用于计算基础块,跨平台应以 statvfs 为准 ✓ 正确答案 C statfs 的 f_bsize 永远等于 4096 D statvfs 的字段都是 32 位,无法表示大容量
# 15. fcntl 记录锁(F_SETLK/F_SETLKW)与 flock 在锁粒度、继承与 NFS 语义上有何差异? A flock 可对文件字节区间加锁,粒度更细 B fcntl 锁与文件描述符绑定,关闭任一 fd 会释放该进程全部锁 ✓ 正确答案 C fcntl 锁可随 fork 继承给子进程 D flock 锁与进程绑定,与打开的文件描述无关
# 16. POSIX file lock(fcntl F_SETLK)与 NFS 文件锁协议在分布式文件系统下的局限性? A NFS 文件锁在网络异常时能瞬时恢复,无一致性风险 B NFS 锁只与客户端绑定,与服务器无关 C NFS 文件锁与本地锁完全等价,可靠 D fcntl 锁在 NFS 上通过 NLM 协议实现,存在崩溃后锁失效/不清理、跨版本行为差异等局限 ✓ 正确答案
# 17. POSIX 路径解析中符号链接的跟随规则是什么,ELOOP 错误在何种条件下产生? A 符号链接可以无限级联跟随,不会报错 B O_NOFOLLOW 会强制跟随符号链接 C 符号链接永远不跟随,直接使用链接内容 D ELOOP 在链接级联超过上限或形成循环时产生,O_NOFOLLOW 可阻止跟随最终成分 ✓ 正确答案
# 18. 路径中末尾斜杠(trailing slash)与点段(./..)在解析时如何处理,对符号链接有何影响? A trailing slash 对符号链接没有任何影响 B .. 段永远被忽略,不影响解析 C 路径带末尾斜杠时,最终成分必须是目录,否则跟随链接报 ENOTDIR ✓ 正确答案 D 点段在符号链接解析中会被完全忽略
# 19. 绝对路径与相对路径解析在遇到符号链接指向绝对路径时如何继续,解析深度如何限制? A 符号链接目标为相对路径时,相对当前工作目录解析 B 符号链接目标为绝对路径时,解析基准切换到根目录 ✓ 正确答案 C 符号链接跟随没有深度限制 D 相对路径从根目录开始解析
# 20. O_NOFOLLOW 与 O_PATH 标志如何改变路径解析与符号链接跟随行为? A O_PATH 使 open 跟随所有符号链接 B O_NOFOLLOW 使 open 不跟随最终符号链接并返回 ELOOP,O_PATH 提供不真正打开文件的路径句柄 ✓ 正确答案 C O_NOFOLLOW 影响路径中的所有符号链接 D O_PATH 打开的文件可直接读写内容
# 21. realpath() 如何将含符号链接与点段的路径规范化,失败时的错误语义是什么? A realpath 不做符号链接解析,只合并点段 B realpath 解析符号链接并消除点段,返回绝对规范路径,失败时返回 NULL 并置 errno ✓ 正确答案 C realpath 对不存在的路径也返回规范路径 D realpath 的缓冲区必须由调用者传 NULL,否则报错
# 22. POSIX XBD 中对 Process、Thread、Realtime Signal、Thread Cancellation 等术语的定义与 SUSv4 之间有何差异? A Thread Cancellation 取消线程时无需清理 B XBD 与 SUSv4 完全无关,是两份独立标准 C Realtime Signal 与普通信号无区别,无需排队 D XBD 是 SUSv4 的基础卷,提供 Process/Thread/Realtime Signal 等术语定义,SUSv4 由多卷组成 ✓ 正确答案
# 23. POSIX 标准的 normative 与 informative 章节如何区分,实现一致性测试(VSX、CTS)依赖哪些 must/should/may 条款? A should/may 条款是强制要求,必须严格满足 B must/shall 是强制要求,一致性测试(VSX、CTS)主要验证这些条款 ✓ 正确答案 C informative 章节也是必须遵守的规范 D 一致性测试验证所有条款,包括 should/may
# 24. POSIX 术语表中的 Race Condition、Async-Signal-Safety、Torn Read 在 XBD 中如何被定义,对代码实现的硬约束是什么? A 竞态条件允许结果依赖执行顺序,无需处理 B 异步信号安全保证所有函数可在信号处理器中调用 C 撕裂读是正常的,不需要处理 D 信号处理器只能调用 async-signal-safe 函数,多字节共享数据需原子/对齐访问避免撕裂读 ✓ 正确答案
# 25. POSIX 1003.1-2017 与 1003.1-2008 在接口数量(均约 1200 个,2017 主要合并 2008 的技术勘误而非大规模扩充接口)与卷次拆分上的演进背景是什么? A 1003.1-2017 相比 2008 大规模新增接口,数量翻倍 B 1003.1-2017 主要合并技术勘误,接口数量保持约 1200 个 ✓ 正确答案 C 1003.1-2008 与 2017 完全无关 D 1003.1-2017 删除了系统接口卷
# 26. POSIX 术语表中的 Robust Mutex 与 Priority Inheritance 在 Linux glibc 与 musl 实现上的差异是什么? A Robust Mutex 只在单线程中有效 B glibc 与 musl 的锁实现完全相同,无差异 C Priority Inheritance 与内核调度无关 D Robust Mutex 与 Priority Inheritance 都依赖内核 futex/rt_mutex,glibc 与 musl 在封装与支持细节上存在差异 ✓ 正确答案
# 27. Configuration、Subprofiling、Option Group 在 SUSv4 中如何组合,与 autoconf 的 AC_CHECK_FUNC 关联有哪些? A Option Group 定义可选功能集合,AC_CHECK_FUNC 探测函数符号,但需结合 sysconf 确认选项激活 ✓ 正确答案 B AC_CHECK_FUNC 能完全判断选项是否激活 C Subprofiling 与配置无关 D sysconf 只在编译期使用
# 28. POSIX 1003.1 选项的 ASN.1 编码与实现一致性声明(ICS、ISR)如何在测试套件中验证? A 测试套件据 ICS 选择应测试的选项,验证声明与实际行为一致 ✓ 正确答案 B ICS 声明支持的选项无需测试 C ASN.1 编码与选项验证无关 D 测试套件会测试所有可能选项,忽略 ICS
# 29. POSIX Conformance 文档中 marked-up interface 与 shaded interface 的实现责任差异是什么? A shaded interface 是必须实现的接口 B 两类标注含义完全相同 C marked-up interface 指明接口属于某一致性集合,shaded interface 表示可选,实现责任不同 ✓ 正确答案 D 标注只影响文档排版,不影响实现责任
# 30. POSIX locale 的 LC_ALL、LC_COLLATE、LC_CTYPE 优先级链与 setlocale 调用语义如何实现? A LC_ALL 优先于各 LC_* 与 LANG,setlocale(cat, "") 按环境变量逐级选择 ✓ 正确答案 B LC_CTYPE 优先于 LC_ALL C setlocale 设置只影响单线程 D LANG 优先于所有 LC_* 分类
# 31. POSIX 正则表达式(BRE/ERE)语法在 grep、sed、awk 中的差异,POSIX::regex 与 Perl 兼容模式如何取舍? A grep 默认 BRE,awk 默认 ERE,BRE 中 ( ) 需转义为 \( \) 才表示分组 ✓ 正确答案 B grep 默认 ERE,sed 默认 ERE C BRE 与 ERE 的元字符语义完全相同 D POSIX::regex 支持环视与命名分组
# 32. POSIX BRE 与 ERE 在元字符转义(\( \) vs ( ))上的差异对移植性的影响? A BRE 中 ( ) 是字面字符,需转义为 \( \) 才表示分组;ERE 中直接有效 ✓ 正确答案 B 两者转义规则完全相同 C BRE 中 ( ) 直接表示分组 D 转义差异不影响正则移植性
# 33. POSIX 字符类 [:alpha:]、[:alnum:] 与 Unicode 类别下的等价与差异? A [:alnum:] 只对应数字类别 B 两者完全等价,无差异 C [:alpha:] 通常对应 Unicode 字母类别,但受 locale 影响,二者是语义近似而非完全一致 ✓ 正确答案 D POSIX 字符类与 locale 无关
# 34. POSIX 系统数据类型(pid_t、size_t、ssize_t、off_t、mode_t)的宽度稳定性与 ABI 兼容性如何保证? A pid_t 永远是 64 位 B off_t 等类型宽度受平台与 LFS 影响,ABI 兼容要求布局稳定,应避免硬编码宽度 ✓ 正确答案 C off_t 宽度与平台无关,永远是 32 位 D 类型宽度只影响编译期,不影响 ABI
# 35. POSIX clock_t 与 clockid_t 在不同实现下的取值范围,CLOCK_REALTIME 与 CLOCK_MONOTONIC 的语义差异? A CLOCK_REALTIME 是墙上时钟,可被 NTP 调整;CLOCK_MONOTONIC 单调递增,测间隔更可靠 ✓ 正确答案 B CLOCK_MONOTONIC 可被用户任意设置 C clock_t 与 clockid_t 是完全相同的类型 D CLOCK_REALTIME 永不跳变
# 36. POSIX regex 在 NFA 与 DFA 引擎上的实现策略差异,对回溯与性能的影响? A NFA 引擎保证线性匹配时间 B DFA 引擎支持反向引用 C NFA 基于回溯,支持捕获组但可能指数退化;DFA 线性匹配,无回溯但内存大 ✓ 正确答案 D POSIX 语义要求最短匹配,与引擎无关
# 37. POSIX locale 在容器镜像中的默认行为(POSIX/C/POSIX)与云厂商镜像的语言环境差异? A 精简容器默认 C/POSIX locale,按 ASCII 处理,需显式设置并安装 locale 数据以支持 UTF-8 ✓ 正确答案 B 所有容器默认启用 UTF-8 locale C C locale 完全支持 UTF-8 字符分类 D 云厂商镜像默认启用 en_US.UTF-8
# 38. 当 setlocale 失败时,应用是否回退到 C locale 还是用户预期 locale,如何做最小惊讶? A 应检查返回值,失败时回退到 C locale 并记录警告,避免静默忽略 ✓ 正确答案 B 失败时应用应继续使用用户预期 locale,忽略错误 C setlocale 从不失败 D 失败回退到 C locale 不会改变任何行为
# 39. POSIX 中 REG_NOSUB、REG_EXTENDED、REG_ICASE 等 flag 在 C/POSIX 系统中的兼容性矩阵? A REG_ICASE 与 locale 无关 B REG_NOSUB 与 REG_EXTENDED 语义完全相同 C 所有 flag 在任意实现中行为完全一致 D REG_EXTENDED 用 ERE、REG_ICASE 忽略大小写、REG_NOSUB 不取子串提升性能,但实现细节可能不同 ✓ 正确答案
# 40. POSIX regex 不可用时的回退实现代价,业务系统为何通常依赖 PCRE 或 RE2? A POSIX regex 支持环视与命名分组 B POSIX regex 功能有限,PCRE 功能丰富、RE2 线性匹配抗 ReDoS,业务常依赖二者 ✓ 正确答案 C RE2 基于回溯,可能 ReDoS D PCRE 保证线性匹配时间
# 41. POSIX sigset_t 与 sigaction 结构在 Linux 与 BSD 上的 ABI 兼容性如何测试? A 直接访问 sigaction 内部字段是安全的 B 所有平台 sigaction 布局完全一致 C sigset_t 在所有平台大小相同 D Linux 与 BSD 的 sigaction 布局可能不同,应通过 API 访问并用 sizeof/offsetof 验证 ✓ 正确答案
# 42. POSIX 64-bit 接口(off_t、rlim_t)的 LFS(Large File Support)特性启用条件与 _FILE_OFFSET_BITS 关系? A off_t 默认永远是 64 位 B _FILE_OFFSET_BITS 定义在头文件之后也生效 C 定义 _FILE_OFFSET_BITS=64 使 off_t 变 64 位,需在包含任何系统头文件前定义 ✓ 正确答案 D _LARGEFILE64_SOURCE 与 _FILE_OFFSET_BITS 无关
# 43. POSIX _POSIX_C_SOURCE、_XOPEN_SOURCE、_GNU_SOURCE 在 glibc 中的生效层级与覆盖接口范围? A 这些宏可在任意位置定义,效果相同 B _POSIX_C_SOURCE 覆盖范围大于 _GNU_SOURCE C _XOPEN_SOURCE 只启用 BSD 接口 D _GNU_SOURCE 包含 _POSIX_C_SOURCE 与 _XOPEN_SOURCE 的接口并扩展,覆盖范围最广 ✓ 正确答案
# 44. 当程序同时包含 POSIX 与 Windows SDK 头文件时(MinGW/MSYS),feature macro 的传播如何控制? A 应用条件编译与头文件隔离,避免 POSIX 与 Windows 宏互相污染 ✓ 正确答案 B 两套头文件的宏互不影响,可任意混用 C _WIN32 宏在 POSIX 代码中总是安全 D feature macro 无法在 Windows 下传播
# 45. POSIX:200809 扩展在 glibc 中的 _POSIX_C_SOURCE=200809L 阈值与各接口启用矩阵? A 该宏启用 POSIX 2008 接口(如 getline、strdup),glibc 用版本判断控制接口暴露 ✓ 正确答案 B 该宏禁用所有 POSIX 接口 C 接口启用只与编译器版本有关,与宏无关 D 200809L 用于启用 C 语言标准
# 46. POSIX realtime signals(SIGRTMIN..SIGRTMAX)在排队与优先级上的语义与 System V 信号差异? A 实时信号数量无限 B 实时信号与 System V 信号完全相同 C 实时信号不排队,多个信号合并 D 实时信号支持排队、携带数据与优先级,而 System V 信号会合并且无数据 ✓ 正确答案
# 47. POSIX open、read、write、close 与 fopen、fread、fwrite 在缓冲策略与错误恢复上的差异? A 系统调用自动缓冲,提升效率 B 两者缓冲策略完全相同 C stdio 无缓冲,与系统调用等价 D open/read/write 无缓冲直连内核,fopen/fread 带用户态缓冲,错误处理方式不同 ✓ 正确答案
# 48. POSIX directory stream 接口(opendir、readdir、closedir)相对 fdopendir 与 getdents 的取舍? A fdopendir 无法与 openat 结合 B getdents 是 POSIX 标准接口 C readdir 不可跨平台 D opendir/readdir 可移植,fdopendir 支持 fd 操作,getdents 高性能但 Linux 专属 ✓ 正确答案
# 49. POSIX aio(POSIX 异步 I/O)接口在 Linux 上长期被标记为 broken 的原因与 io_uring 替代? A io_uring 无法批量提交 B aio 在 Linux 上性能优于 io_uring C aio 是内核原生异步接口,无限制 D aio 在 Linux 上基于线程池实现,存在开销与不完整问题,io_uring 提供真正的异步与批量提交 ✓ 正确答案
# 50. POSIX 对文件名可移植字符集的规定是什么,依赖其他字符为何损害跨平台可移植性? A 任何字符都可跨平台移植 B POSIX 规定可移植字符集为 A-Z、a-z、0-9、点(.)、下划线(_)、连字符(-),依赖其他字符跨平台可能失败 ✓ 正确答案 C 中文文件名在所有文件系统上完全可移植 D 空格与特殊字符在 Unix 上无需转义
# 51. IEEE Std 1003.1 与 ISO/IEC 9945 在国际标准化与版权控制上的协作模式,实现者为何同时参考这两份文件? A ISO 9945 与 POSIX 无关 B 两者是完全不同的标准 C 标准文本受版权保护,实现无法引用接口名 D 两者内容基本一致,由 IEEE/Open Group 制定、ISO/IEC 采纳,实现者可同时参考 ✓ 正确答案
# 52. BSD、SVID、XPG、UNIX 三个标准之间的关系及 SUSv4 统一后的兼容性矩阵如何查阅? A BSD、SVID、XPG 分别描述不同 Unix 体系,SUSv4 统一为单一规范,兼容性经选项组标注 ✓ 正确答案 B 各标准完全独立,无交集 C SUSv4 与 XPG 无关 D 兼容性矩阵无法查阅
# 53. feature_test_macros(7) 文档为何要求 macro 必须先于任何系统头文件包含,未定义时的默认行为是什么? A 宏必须在包含任何系统头文件前定义,否则头文件已按旧状态生成声明 ✓ 正确答案 B 宏可在任意位置定义,效果相同 C 未定义宏时 glibc 不暴露任何接口 D 头文件包含后宏仍可生效
# 54. _DEFAULT_SOURCE、_BSD_SOURCE、_SVID_SOURCE 在 glibc 2.19 后的合并与弃用时间线是什么? A _DEFAULT_SOURCE 与 _BSD_SOURCE 完全无关 B _BSD_SOURCE 在 glibc 2.19 后仍是最新推荐 C glibc 2.19 引入 _DEFAULT_SOURCE 取代 _BSD_SOURCE/_SVID_SOURCE,后者被弃用 ✓ 正确答案 D glibc 2.19 引入 _SVID_SOURCE 作为默认
# 55. pthread_create / pthread_join / pthread_exit / pthread_cancel 的取消状态、类型与取消点的关联? A pthread_join 不是取消点 B 默认异步取消,立即终止 C 默认延迟取消,取消在取消点生效,取消时执行 pthread_cleanup 清理函数 ✓ 正确答案 D 取消类型与取消状态无关
# 56. AT_FDCWD 与 *at() 系列函数(openat/fstatat 等)如何改变路径解析的基准目录并避免 TOCTOU? A 相对路径总是相对 cwd,与 fd 无关 B AT_FDCWD 表示使用根目录 C *at() 函数只能处理绝对路径 D *at() 以目录 fd 为基准解析相对路径,AT_FDCWD 表示用 cwd,可避免 TOCTOU ✓ 正确答案