ちょっと興味があるんだけど。EAGAIN と EWOULDBLOCK の両方#define
を異なる値として提供するシステムは?
2 に答える
いくつかありました... http://www.gnu.org/s/hello/manual/libc/Error-Codes.html
移植性に関する注意: 多くの古い Unix システムでは、この状態は、EAGAIN とは異なる明確なエラー コードである EWOULDBLOCK によって示されていました。プログラムを移植可能にするには、両方のコードをチェックして、同じように扱う必要があります。
http://lists.parisc-linux.org/hypermail/parisc-linux/9895.html
一部の SysV システムでは、EAGAIN != EWOULDBLOCK です。HPUX から errno 定義を継承したと思います...
古い AIX もそのようなシステムです: http://programming.itags.org/unix-linux-programming/81597/
HP-UX (および古いバージョンの AIX)
AIX の場合、コードのリストを見つけました: http://homepage3.nifty.com/owl_h0h0/unix/job/UNIX/tutorial/error.html
11 再び。54 イーウッドブロック
OS/390 も: http://web.archiveorange.com/archive/v/zvbaIz8u6TzsQHHjfzOi
EWOULDBLOCK != EAGAIN である OS/390 およびその他のプラットフォーム
より完全な表があります: http://www.ioplex.com/~miallen/errcmp.html
SUSv3 AIX 4.3,5.1 HP-UX 11.22 Solaris 9,10 Linux 2.4.28,2.6.9 IRIX 6.5[4] OSF1 FreeBSD 5.2.1 OSX 10.3.8 MSVC6
EAGAIN 1 0 Resource unavailable, try again [3] 11 Resource temporarily unavailable 11 No more processes 11 Resource temporarily unavailable 11 Try again 11 Resource temporarily unavailable 11 ditto 35 Resource temporarily unavailable 35 Resource temporarily unavailable 11 Resource temporarily unavailable
EWOULDBLOCK 0.9 0 Operation would block [3] 54 Operation would block [2] 246 Operation would block 11 11 Operation would block 11 Resource temporarily unavailable 35 Operation would block 35 Operation would block 35 Operation would block
したがって、AIX 4.3、5.1; HP-UX 11.22 と OSF1 は、EAGAIN と EWOULDBLOCK に異なるコードを使用します。
はい、いくつかのシステムがあります。
GNU C ライブラリでは、常に同じ値を持ちます。