xxdコマンドにファイル変更機能はあるか
xxdコマンドが既存ファイルを更新する条件 xxdコマンドをエージェントAIに実行させる際、どのような呼び出し方であれば既存ファイルへの 変更が発生するのかを、xxd本体のソースコードに基づいて整理する。 1. 判断基準の結論 既存ファイルが更新されるかどうかを分けるのは -r オプションの有無ではない 。 本質的な条件は次の2点である。 コマンドラインに outfile(第2引数)が指定されているか そのoutfileが 既存のファイルパスを指しているか この2条件が満たされる場合、 -r の有無に関わらず既存ファイルは変更される。 -r が変えるのは「変更が起きるかどうか」ではなく「どのように変更されるか」である。 2. ソースコード上の根拠 vim本家のxxd.cにおける、outfileを開く処理の該当箇所は以下の通りである。 int mode = revert ? O_WRONLY : (O_TRUNC|O_WRONLY); if (((fd = OPEN(argv[2], mode | BIN_CREAT(revert), 0666)) < 0) || (fpo = fdopen(fd, BIN_WRITE(revert))) == NULL) revert は -r 指定の有無を表すフラグである。ここでのモード指定が、 既存ファイルへの影響を決定づけている。 -r なし ( revert =0): mode = O_TRUNC | O_WRONLY 。 O_TRUNC が付与されるため、 outfileが既存ファイルであれば開いた瞬間に中身が消去され、新たなhexdumpテキストで 上書きされる。 既存内容は完全に失われる。 -r あり ( revert =1): mode = O_WRONLY ( O_TRUNC なし)。truncateされないため、 hexdump内のアドレス情報に基づき、該当オフセットのバイトだけが上書...