%20%E3%81%AF%E6%96%B0%E3%81%97%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%98%E8%BF%B0%E5%AD%90%20posix%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
posixでopen()の戻り値を設定する必要があります。 Linuxのマニュアルページに記載されているように「新しいファイル記述子」を返す方法:
戻り値
open(), openat(), and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).
編集:Goldilocks、ありがとう!私は正しい方向を見ていませんでした。私がやっていることは、このシステムコールの戻り値を変更することです。明らかに間違ったものを返します。
答え1
ファイルを開くには、次の構造を使用できます。
int fd;
if ((fd = open(path, flags)) < 0) {
/* An error occurred, the reason is in errno */
int _errno = errno; /* Save errno value */
fprintf(stderr, "Failed opening file '%s': %s\n", path, strerror(_errno));
return;
}
/* The file was successfully opened */
したがって、戻り値には通常、ファイル記述子が1つしかありません。この場合、-1
エラーが発生しました。発生したエラーは変数に保存されます(ソースファイルに含まれて取得errno
)。errno.h