[解決済み] デフォルトの書き込み動作 - O_TRUNC or O_APPEND?
2022-03-05 02:11:01
質問
を実行したときのデフォルトの動作はどうなっていますか?
open
アクセスモードを持つファイル
O_WRONLY
または
O_RDWR
. ファイルは追記モードで開かれていますか、それとも切り捨てモードですか?からの
マンページ
:
引数のflagsには、以下のアクセスモードのいずれかを含める必要があります。 O_RDONLY、O_WRONLY、O_RDWR のいずれかであること。
...
おまけ ゼロ またはそれ以上 ファイル作成 フラグと ファイルステータス フラグにはビット単位の OR を指定することができます。
これは次のように聞こえます。
O_APPEND
と
O_TRUNC
フラグは任意です。では、次のようにするとどうなるでしょうか。
void main ( void )
{
int fd = open( "foo.txt", O_WRONLY );
write( fd, "hello", 5 );
close( fd );
}
解決方法は?
どちらでもない。
-
デフォルトでは、ファイルはカーソルが先頭に位置する状態で開かれます。書き込みを行うと、ファイルの先頭のバイトが上書きされます。
-
O_TRUNC
は、ファイルが存在する場合は切り捨てられる。 -
O_APPEND
は、ファイルの先頭で上書きするのではなく、末尾に追加して書き込むようにします。このフラグは永続的である。データを読むためにカーソルを他の場所に移動しても、書き込みの前に常にファイルの末尾に移動されます。
これらのフラグは直交しており、相互に排他的ではありません。もし、最初にファイルを切り捨てて、それ以降の書き込みを常に追記するようにしたい場合は、これらを組み合わせることも可能です。
関連
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み] パイプで "tee "を使用しているときに、標準エラーをファイルに書き込むにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。