Lobsters | 📄 原文链接 | 2026-10-24 收录

不用写 C 包装函数,从别的语言里骗出 errno

来源:sebsite.pw — 2026-09-25

📋 概述

errno 是个宏,展开方式不可移植也没有稳定性保证,因此从非 C 语言调用 libc 函数时拿不到错误码,常规做法是写一个返回 errno 的 C 包装函数。作者用 Hare 写了一套相当离谱的方案:程序启动时把 stderr 复制一份、把 STDERR_FILENO 重定向到临时文件,出错时调用 perror 让它把错误描述写进临时文件再读回来,然后用 strerror 预先建好的消息表反查,把字符串还原成具体的 errno 数值。

🔑 核心要点

💡 金句

there aren't any libc functions which return the value of errno.
← 返回 Lobsters 首页