http://q.hatena.ne.jp/1272351283 の質問と被りますがcp、mv、installコマンドでは特に指定がなければ上書きされるようですが、
上書き先のモジュールなどが使用中の場合でも上書きされるのでしょうか?
Windowsなどでは使用中のファイルは削除出来なかったりということがありますが、Linuxにおいて上書き先のファイルが使用中である場合の挙動を教えて下さい。
上書きされません。
上記ページが分かりやすいと思いますが、open というシステムコール(Windows での WinAPI のようなもの)が ETXTBSY というエラーが発生します。
英語環境だと「Text file busy」、日本語だと「テキストファイルがビジー状態です」と言われますが、いわゆる「テキストファイル」でなくても、このメッセージになります。
その理由は...、う~ん、なぜだろう? ネイティブなバイナリプログラムで、メモリにロードされた状態で CPU が実行するコードが入っている部分を UNIX では「Text セグメント」と言うのと関連があるのかもしれません。
基本的には、全部上書き可能だと思ってもらって問題ないです。上書きガードかかかるのは非常に特殊な場合のみです。
JULYさんの言う上書き制限は、実行中の実行ファイル(シェルスクリプトの場合、sebangに指定された実行ファイル)のみです。
つまり、デフォルトの状態なら、/usr/binとか/bin以下にあるもの以外は上書きできる、ってことです。
また、この場合できないのは、ファイルを開いて別の内容に書き換える、という方法で、
ファイルの削除(unlink)やリネームに関しては実行中でも問題なくできます。
つまり、mvのように削除して同名ファイルを作るという方法なら、いつでも上書きできます。
ありがとうございます。
こちらで作成したtest.cやtest.phpに対して行うのでガードはかかってなさそうですね。
sebangでの指定がどこでおこなわれているのかはちょっと検索しきれませんでしたが、そういったことでしたら大丈夫そうです。
なるほど。
そうなると対象ファイルがビジー状態を判断するか、ETXTBSYのチェックを落とさないと書き換えが出来ないわけですね。
ETXTBSYのチェックの落とし方はちょっと検索した程度はわかりませんでした。
PHPでファイルの書き換えを行っているのでこの辺になるとちょっと技量が追いつかないようです。