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/

10-12 16:12
查看更多