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

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

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

据我所知,这不需要任何文件系统空间,但我检查了未使用的文件空间和文件系统的 inode 使用情况,这些似乎很好,有很多可用空间,据我所知有大量空闲内存(尽管我不知道这个特定进程可能有一些限制,如果这是相关的),所以我不确定是什么原因导致 ENOSPCgettimerid() 调用而返回。

示例代码:

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 errno。

10-06 06:02