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

时间:2018-01-17 14:15:56

标签: c aix

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

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

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

据我所知,这不需要任何文件系统空间,但我检查了文件系统的未使用的文件空间和inode使用情况,这些似乎很好,有很多可用的,并且尽我所能告诉你有足够的空闲内存(虽然这个特定的过程可能有一些我不知道的限制,如果这是相关的),所以我不确定是什么原因可能导致ENOSPC返回ENOSPC来电。

示例代码:

gettimerid()

示例输出:

static timer_t TimerId;

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

有没有人知道什么可能导致AIX上的gettimerid fail [timer id=-1, errno=28] 返回代码?

1 个答案:

答案 0 :(得分:2)

可能是因为重复获取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错误。