Linux系统编程:文件I/O基础与实践
1. 系统编程基础与errno处理
在系统编程中, strerror_r() 函数是线程安全的。它会将长度为 len 的缓冲区填充信息,该缓冲区由 buf 指针指向。调用 strerror_r() 成功时返回 0,失败时返回 -1,并且在出错时会设置 errno 。
对于一些函数,其返回类型的整个范围都是合法的返回值。在这种情况下,调用前必须将 errno 清零,调用后再进行检查(这些函数承诺仅在实际出错时返回非零的 errno )。示例代码如下:
errno = 0;
arg = strtoul (buf, NULL, 0);
if (errno)
perror ("strtoul");
检查 errno 时常见的错误是忘记任何库或系统调用都可能修改它。例如,以下代码存在错误:
if (fsync (fd) == -1) {
fprintf (stderr, "fsync failed!\n");
if (errno == EIO)
fprintf (stderr, "I/O error on %d!\n", fd);
}
如果需要在函数调用过程中保留
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



