2011-06-21 44 views
2

我有一个应用程序,主要工作,但我有一个条件,其中调用:: popen()获取errno设置为ENOMEM错误。作为:: POPEN()的手册页是指你页面:: fork()的本身列出ENOMEM Linux上的这个简短的评论:我想知道如果我真的运行内存导致ENOMEM从:: popen()

The fork() function may fail if: 

    ENOMEM Insufficient storage space is available. 

,或者也许像文件描述符一样的其他资源? fork()可以给ENOMEM以外的东西,而不是系统中的实际内存耗尽吗?这是Centos4。

+0

呃?管(2)将我指向叉(2)的位置在哪里?为什么fork()的错误与pipe()相关? – bdonlan

+0

哎呀,谢谢你,这是popen,不是管道。 – WilliamKF

+1

['strace(1)'](http://linux.die.net/man/1/strace)是什么意思? 'popen(3)'在内部调用'pipe(2)'和'fork(2)';哪个调用返回'ENOMEM','pipe'或'fork'? –

回答

1

我已经确认ENOMEM是因为在重复:: popen()之后没有调用:: pclose()而导致的,并最终用完了文件描述符。

+1

该文件建议应该是'EMFILE'或'ENFILE',而不是'ENOMEM'。我认为你应该接受@ Adam的建议,并在strace下运行它,以确定哪个系统调用实际上发生了错误,因为这听起来很奇怪。 – Nemo