我正在使用AIX 6.1。我正在使用的程序(并参与开发)包含对C库gettimerid()
函数的调用。
我遇到的问题是gettimerid()
调用已经开始间歇性地每天失败一次,返回-1(表示错误),当我检查errno
时,它已被设置为{ {1}}(28d),表示“设备上没有剩余空间”。
根据the AIX documentation,ENOSPC
未显示为可能的返回值之一,让我对这意味着什么感到困惑。
据我所知,这不需要任何文件系统空间,但我检查了文件系统的未使用的文件空间和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]
返回代码?
答案 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
错误。