c - 什么会导致 gettimerid() 失败,将 errno 设置为 ENOSPC(未记录)?

标签 c aix

我正在使用 AIX 6.1。我正在使用(并参与开发)的程序包含对 C 库 gettimerid() 函数的调用。

我遇到的问题是 gettimerid() 调用开始间歇性失败,可能每天一次,返回 -1(表示错误),当我检查 errno,它已设置为 ENOSPC (28d),表示“设备上没有剩余空间”。

根据 the AIX documentation , ENOSPC 没有显示为可能的返回值之一,这让我对这意味着什么感到困惑。

据我所知,这不需要任何文件系统空间,但我检查了文件系统的未使用文件空间和 inode 使用情况,这些似乎没有问题,有足够的可用空间,而且就我而言告诉有足够的可用内存(尽管我不知道这个特定进程可能有一些限制,如果这是相关的),所以我不确定是什么导致 ENOSPC 被返回为gettimerid() 调用的结果。

示例代码:

static timer_t TimerId;

if ( ( TimerId = gettimerid(TIMEOFDAY, 0) ) < 0 )
{
  printf( "gettimerid fail [timer id=%d, errno=%d]", TimerId, errno );
}

示例输出:

gettimerid fail [timer id=-1, errno=28]

有谁知道什么可能导致 AIX 上的 gettimerid() 返回此代码?

最佳答案

可能是重复获取TIMEOFDAY定时器,中间没有调用reltimerid引起的。举个例子:

 while( 1 )
 {
   timer_t TimerId;
   if( ( TimerId = gettimerid( TIMEOFDAY, 0 ) ) < 0 )
   {
     printf( "gettimerid failed: %d\n", errno );
     break;
   }
   else
     printf( "gettimerid OK: %d\n", TimerId );
 }

这个循环的输出是:

gettimerid OK: 5
gettimerid OK: 6
gettimerid OK: 7
gettimerid OK: 8
gettimerid failed: 28

这是未记录的 ENOSPC 错误号。

关于c - 什么会导致 gettimerid() 失败,将 errno 设置为 ENOSPC(未记录)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303211/

相关文章:

C base64编码字符串

c - 无法使用 wolfssh 库与 Cisco IOS 设备建立 ssh 连接

c - math.h 头文件在 AIX 上不起作用

c++ - 在 AIX 中启动 C++ 可执行文件时出错

linux - 数据库备份未写入光盘,空间不足?

c - XLib:全屏后如何返回窗口模式?

c - 反转 32 位 int 中的每 4 位

linux - ActiveMQ 5.9 启动脚本?

java - 获取响应代码时文件描述符泄漏。 (cxf, ssl)

c - Linux C - 实现程序可以 self 更新的能力