• ベストアンサー

i-node方式におけるファイル削除処理について

i-node方式において、ファイルを削除する時の処理についてわかりません。 i-node方式においてファイルを削除する時の処理は下記の通りと考えております。 (1)削除するファイルを格納しているディレクトリのディレクトリファイルから、削除するファイルに関するレコードを削除する。 (2)削除するファイルのデータブロックに該当するi-nodeビットマップをON→OFFにする。 上記認識が正しいかどうかと、正しくなかった場合には正しい処理の流れを教えてもらえると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

正しくないです。 (1) は正しい。「レコード」とは呼ばないですが、まあ、そんなものです。 (2) 該当i-nodeのリンクカウントを1減らす (3) そのリンクカウントが0でなかったら処理終了 (4) リンクカウントが0になったら、そのi-nodeエントリが使っていたブロックを全部解放(スーパーブロックの該当のビットマップをオフに)。およびi-nodeエントリの削除

関連するQ&A

  • VBScriptで削除処理

    初めまして。 VBScriptを今回初めて使用しながらスクリプトを作成しようとしています。 〔質問〕 以下のような削除処理をVBScriptにて実施したいのですが、どのような構文を書けばいいのでしょうか? ご教授お願いします。 以下、例を挙げ記述致します。 (例)処理日が2008/3/22の場合。 「AAAA」ディレクトリ配下の以下のログファイルを二日前までの日付になっているログファイルのみ残し、あとは全て削除するという処理をしたい。 AAAAディレクトリの配下 ・aa080319.log→削除 ・aa080320.log→削除 ・aa080321.log→残す ・aa080322.log→残す 上記例を用いますが、自分で考えた処理フローとしまして、 (1)「AAAA」ディレクトリ配下のファイル一覧をテキストファイルに書き込む。 (2)「(1)」で作成したテキストファイルを読み込み、「2008322」と「2008321」に一致しないログファイルを削除。 以上、宜しくお願いします。

  • 古いフォルダーを削除するbatファイル

    batファイルでディレクトリのバックアップを行いました。 このバックアップを行うときに古いディレクトリを 削除するbatファイルを考えているのですがうまくいきません。 どなたかお知恵をお貸しください。 下記のように名前が付けられたディレクトリがあります。 090601 090602 090603 090604 このディレクトリの日付が古いディレクトリを削除するようにしたい。 (上記の場合090601が該当) 変数にディレクトリの090601を入れられるようなbatを作ればいいのでしょうが。 それが浮かびません。 どのようにしたらよろしいでしょうか??

  • Kシェルでファイル削除処理

    kシェルで、ファイルを1行ずつ読み込み、記述されたファイルを削除する処理を作成したいのですが、ワイルドカード指定にも対応したいです。最初はrm -r で実施しようとしたのですが、これだとディレクトリも削除されてしまうので使えませんでした。rm -fでやった場合も削除に失敗した場合のエラーハンドリングが難しく困っています・・・。 何か良い方法はないでしょうか? lsコマンドの出力結果を再度読み込み、ファイルだったら消すという方法ぐらいしか思い浮かばず・・・。

  • VBAで、テキストファイルの削除はどうするのでしょうか。

    VBA で、あるディレクトリにあらかじめ作成、保存してあるテキストファイルを、Input Box からそのファイル名を指定してExcel に読込み、所定の処理をした後、元のテキストファイルをディレクトリ上から削除するにはどうしたらよいでしょうか。 いつも決まった名前のファイルを削除するのは Kill コマンドで容易にできたのですが、InputBox から入力した任意の名前のファイルを削除する方法を教えていただけませんか。

  • 1ファイルずつ読み込みたい

    ウィンドウズ環境でactive perlを利用しています。 あるディレクトリーの中に2000位のファイルが入っており、このファイルを読み込んで置換処理を行うため下記のようなperlを作っています。 1ファイルはおおよそ3000行くらいです。 foreach(<*.html>) { open(IN_FILE, $_) || die; open(OUT, ">$_.tmp") || die; @record=<IN_FILE>; foreach $record (@record){ $record =~s/aaa/bbb/isg; } print OUT @record; close( IN_FILE); close( OUT); rename("$_.tmp", $_) ; } 当たり前かもわかりませんが、メモリー不足になり処理が中断します。 ディレクトリーの中のファイル数を600程度に少なくすると処理が完了します。 そこで質問なのですが、ディレクトリーの中のファィルを一度に全部読み込まず、1ファイルずつ順次読み込んでいくことはできないでしょうか。 最初の1行目のforeachをwhileに変えたりしたのですがうまくいきません。 対応策あればご教示ください。

    • ベストアンサー
    • Perl
  • No.1067の『ファイルの削除について』の続き

    あるディレクトリ内のファイル(ファイル名はマシン日付.csvとなっています。例:20040906.csv)を検索し、 今日より90日前の日付を取得し、それ以前のファイルをディレクトリから削除するという操作をしたいと思います。 ただし、ファイル名の20040906の前後に文字がある場合には削除できないようにしたいのです。 -------------------------------------- 以下、EtherskyのNo.1067に対する回答より抜粋 $day = 90; #90日前 $dir = './hoge'; #hogeディレクトリとする ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-(60*60*24*$day)); #$day日前の日付を求める $del_target = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday); #yyyymmddの形にする($del_target前を削除対象にする) opendir(DIR,$dir); #ディレクトリを開く @list = grep {/\.csv$/i && -f "$dir/$_"} readdir(DIR); #ディレクトリから拡張子csvでファイルだけを吸い出してリストにする closedir(DIR); #ディレクトリを閉じる foreach (@list){ #リストから一つずつ調べる if(/(\d+)\.csv$/i){ #頭が数字のファイルだったら if($1 lt $del_target){ #$del_targetと比較して該当するなら unlink("$dir/$_"); #削除 } } } -------------------------------------- 上記の場合で試したところ、20040906の前にabcとつけると 削除されてしまいます。 後ろにabcがついている場合には削除されません。 どのようにすれば削除されないようになるでしょうか?

    • ベストアンサー
    • Perl
  • ファイルに名前がついていないファイルを削除したい

    viを操作中に、誤って操作したようで(オレじゃない)、無名ファイルと云うのでしょうか、ファイル名の無いファイルが 存在しています。 “ ls ”コマンドを叩いても標準出力されてない、“ ls -l ”だと、ファイル名以外全て標準出力されます。 “ ls -bl ”だと、 ¥177 とファイル名と云っていいのか、8進定数、エスケープシーケンス、文字コードなのか理解できてませんが とにかく一つのファイルとして存在しています。 そこでお知恵を拝借させて下さいませ。 この“ 名前の無いファイル ”をどうやって削除しますか? 最終手段は考えてます・・・ 必要なファイル全てを、別ディレクトリに退避(copy)して、その不可解なファイルが格納されている ディレクトリごと削除し、退避先から復活させる。 この手段は、業務中でもありとても危険を感じています。 理想的には、¥177ファイルを、mv(リネームと云うのか、ファイル名を付けると云うのか)してから 削除したいものです。 shellは ・csh ・tcsh ・bash あたりで・・・ 大変困っております。 どうか宜しく頼みます。

  • 削除できないファイル

    削除できないファイルの削除方法を教えて頂きたいです。 OS:windows7 64bit 削除したい場所:E:\Users\○○\Downloads 削除したいファイル名:「S B 11 」(最後に半角スペースあり) 拡張子:なし エラー理由:「次の場所にはありませんでした。この項目の場所を確認・・・」 試した方法 1.再起動 2.名前の変更→上記エラーが出て変更出来ず 3.メモ帳等で上書き保存→上書きしたにも関わらず、同じファイル名のファイルが2つになる 4.コマンドプロンプトで「del ファイルディレクトリ」→見つかりませんでした 5.コマンドプロンプトで「del \\?\」→構文が間違っています よろしくお願いします。

  • Unixでファイルを削除するとき、「~~を除いて」削除する、は?

     Unixで、カレントディレクトリにたくさんのファイルがあって、 そのうちの一つとか二つのファイルのみ残して あとはみんな削除したいとき、 どのようにすればよいのでしょうか。 rm * とすると、みんな消えてしまいます。 もっとも、私の環境では .cshrcに alias rm 'rm -i'  と書いてあるため、削除するときにいちいち確認を取ってきます。 そのときに 削除しないものには n(no)と入力すればよいのですが、 ファイルがたくさんあると いちいち見るのも面倒になって、 y(yes)をどんどん入力してしまって削除してしまう恐れがあります。 コマンドを入力するときに 削除しないものを指定できないでしょうか。 Unixの初級者なので、そのおつもりでご解答いただくとうれしいのですが。。。

  • PHP ディレクトリ内のファイルを削除

    PHP ディレクトリ内のファイルを削除 PHPでフォームから数枚の画像をサーバへアップロードできるページを作成しました。 これをアップ日から1週経過していれば削除というような処理をしたのですがヒントをいただけますでしょうか。 ディレクトリ内にある画像のアップ日時を取得し、現在の日時から計算し、1週間経過していれば削除、という感じでしょうか。さらにこれが自動化できれば最高です。。 http://www.phppro.jp/qa/871 上記の記事からディレクトリ内のファイル削除自体は参考にできました。 よろしくお願いします。

    • ベストアンサー
    • PHP