我正在使用 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
errno。