int fcntl(int fd, int command, ... /* arg */ );
移植可能ですか: flags = fcntl(fd, F_GETFL);
(注: いいえarg
)?
LinuxとFreeBSDの両方のマニュアル ページでは、これarg
は無視されると述べています。
F_GETFL (void)
Get the file access mode and the file status flags; arg
is ignored.
void
Linux のドキュメントでarg
は、必要ないことを意味します。
関連フラグの POSIX からF_GETFD
の使用例を次に示します。
#include <unistd.h>
#include <fcntl.h>
...
int flags;
flags = fcntl(fd, F_GETFD);
if (flags == -1)
/* Handle error */;
flags |= FD_CLOEXEC;
if (fcntl(fd, F_SETFD, flags) == -1)
/* Handle error */;"
(今日)arg
には必要ないことを示しています。F_GETFD
次に、次のように述べています。
F_GETFD、F_SETFD、F_GETFL、および F_SETFL への arg 値はすべて、将来の拡張を可能にするフラグ値を表します。
それは将来的にF_GETFL
使用される可能性があることを意味しますか?arg
Ohloh コードで "F_GETFL" をすばやく検索すると、ほとんどのオープンソース プロジェクトが合格arg
するという印象が生まれます(通常0
、場合によってNULL
は、または (壊れた?) 場合もあります&fl
)。fcntl(fd, F_GETFL, 0)
が好ましい形式である理由がわかりません。@Wumpus Q.Wumbleyは、フォームも使用する「UNIX環境での高度なプログラミング」ブックが原因である可能性があることを示唆していfcntl(fd, F_GETFL, 0)
ます。
3 番目の引数を必要とするシステム/コンパイラはありflags = fcntl(fd, F_GETFL, 0);
ますか? 現在または将来 (準拠した実装を前提として) 異なる結果fcntl(fd, F_GETFL)
を生成できますか?fcntl(fd, F_GETFL, 0)