1)在libc中有一些函数返回
退出状态-成功状态和错误状态(ES)。
2)还有其他返回可用值的函数。怎么办
他们将他们的退出状态传达给用户?
有两种选择:
2.1)将未使用值返回信号成功状态
以及另一个未使用的返回值来表示该错误
已发生,其状态必须在“errno”变量中查找。
2.2)只返回一个未使用的
值以向用户发出必须退出状态的信号。
在“errno”变量中。
在子案例2.2)中存在问题:未设置成功状态
在“errno”变量中,只有错误状态。
也许我漏掉了一些显而易见的东西,但我不清楚
必须使用哪种逻辑才能合理地使用这些函数。
例如,readdir()
或getwchar()
。
示例如下:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <dirent.h>
int main(void)
{
DIR *dp;
struct dirent *ep;
if ((dp = opendir("/tmp/")) == NULL) {
fprintf(stderr, "opendir: %s\n", strerror(errno));
exit(-1);
}
errno = EINVAL; /* suppose some function exited with error earlier */
while ((ep = readdir(dp)) != NULL) {
if (strcmp(ep->d_name, ".") == 0
|| strcmp(ep->d_name, "..") == 0)
continue;
printf("%s\n",ep->d_name);
}
if (errno != 0) {
fprintf(stderr, "readdir: %s\n", strerror(errno));
closedir(dp);
exit(-1);
}
closedir(dp);
return 0;
}
输出:
...
readdir: Invalid argument
最佳答案
从POSIX规范中可以看到readdir
http://pubs.opengroup.org/onlinepubs/009695399/functions/readdir_r.html
当遇到错误时,应返回一个空指针,并且
应设置errno以指示错误。当结束的时候
遇到目录,返回空指针,错误号
没有改变。
你应该这么做
errno = 0;
每次呼叫
readdir
之前。然后您可以确定是否发生了错误(并且正确地设置了errno),或者它自然地为目录末尾返回了null。你可以在上面的链接中找到这个技巧在示例中使用。
关于c - 如何确定某些libc函数的退出状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42776120/