Go でファイルに追加すると「不正なファイル記述子」エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2024-11-11 15:56:03
オリジナル
721 人が閲覧しました

Why Does Appending to a File Result in a

ファイルの追加試行中に不正なファイル記述子が検出されました

Go ルーチン内でログ ファイルに追加しようとすると、エラーが発生する場合があります「./log.log を書き込みます: 不正なファイル記述子」。ファイルの存在と適切な権限 (666) にもかかわらず、この問題は解決しません。

当初、原因は複数の go ルーチンによる同時ファイル アクセスであると考えられていました。ただし、ミューテックスを実装しても問題は解決できませんでした。

解決策

解決策は、ファイルを開くときに O_WRONLY フラグを追加することです。

if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
ログイン後にコピー

説明

Linux ドキュメントによるオープンの場合、3 つのアクセス モード (O_RDONLY、O_WRONLY、または O_RDWR) のいずれかを指定する必要があります。これらのモードは、ファイルをそれぞれ読み取り専用、書き込み専用、または読み取り/書き込みで開くことを要求します。

デフォルトでは、ファイル記述子は読み取り専用モードで開かれます。/ 内の次のコードで確認できるように、ファイル記述子は読み取り専用モードで開かれます。 usr/local/go/src/syscall/zerrors_linux_amd64.go:

O_RDONLY                         = 0x0
O_RDWR                           = 0x2
O_WRONLY                         = 0x1
ログイン後にコピー

したがって、明示的に指定するO_WRONLY は、ファイルが書き込み専用モードで開かれることを保証し、最初の問題を解決します。

以上がGo でファイルに追加すると「不正なファイル記述子」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート