catopen()在某些情况下失败时不设置errno

时间:2012-03-14 13:51:11

标签: c solaris opensolaris

catopen无法在不同的服务器上打开相同的cat文件,具有相同的设置。

当errno为0时,表示我的理解没有错误。

请告诉我以前是否有人这样看过。 如果有人知道它发生的原因,对我来说非常有帮助

我写的示例代码

int main()
{

   nl_catd cat;

   string fileName;

   cout<<"Enter the cat file name: ";

   cin>>fileName;

   cat = catopen(fileName.c_str(), 0);

   if (cat == (nl_catd)-1)

   {

      cerr << "Unable to open catalogue: " << fileName <<" ....and the Error number: "<<errno<<"\n";

      exit(1);

   }

   printf("File opened...\n");

   catclose( cat );

   exit(0);

}

上述代码的输出

成功案例:

./a.out

Enter the cat file name: LinkMonitor.epod.cat

File opened...

对于faliure案例:

./a.out

Enter the cat file name: ehap_ac_in.epod.cat

Unable to open catalogue: ehap_ac_in.epod.cat0

这里0是错误代码。

1 个答案:

答案 0 :(得分:2)

当您将字符串errno写入"Unable to open catalogue: "时,您已清除cerr

您必须立即保存errno的值。

cat = catopen(fileName.c_str(), 0); 

if (cat == (nl_catd)-1) 

{ 
   int errno_catopen = errno;
   cerr << "Unable to open catalogue: " << fileName <<" ....and the Error number: "<<errno_catopen <<"\n";
   exit(errno_catopen);
}