ファイルシステムのほうが人気だったから。人間の頭が機械のように暗記に長けていて、とんでもなく長い数列を暗記可能でディスクの先頭からを覚えるほうが楽であればファイルシステムはなかったかもしれません。比較的処理をイメージしやすいOpen,Closeという名前がついた。いうことでOpen,Closeとは上記のような処理についた名前である。いうのが回答になります。他1件のコメントを見るな、なるほど・・!ディスク=円盤だと思ってました。上でいうディスクというのは、デバイスドライバだと理解すればよいのでしょうか。ファイルの先頭がディスクの先頭から数えて何クラスタ・セクタ・バイト目なのか?という相関関係の表を読み出します。クロースを呼ばれると、この相関関係の表をメモリーから捨てます。」私の知りたかったのはこれかもしれません。openとはプログラム⇔OS間の処理のことであって、基本的にはメモリ内の話なわけですね。わかったような気がします。ありがとうございます!あとは、ファイルシステムについて勉強すればよいわけですね。08:39:47fopenというレイヤのopenであれば、大雑把に言えば、プログラムとOS間の処理ですね。fopenは少し皮をかぶせていて、もう少し低レベルなopenであれば、openという関数を呼び出すこともできます。様は、最近のソフトウェアは何層にも階層化されていて、基本的にはその下のことは意識する必要もないし、基本できないということに尽きます。openの延長上で、ディスクに何か操作を行うか、メモリ上で完結させるかはOSが適宜判断することであって、openを呼び出すアプリケーションが意識する必要はないということです。RAMDISKであれば、read/writeも含めてすべてメモリ上で完結しますが、アプリケーションは呼び出し先がRAMDISKか、ハードディスクか、はたまたUSBメモリかといったことを意識して操作方法を変えたりすることはないということです。12:54:10そうすると、open時にOS⇔HDD間でなんらかのやりとりが発生してるかもしれないが、それはプログラマにとっては隠ぺいされていて、知る必要はないし知ることもできないと。確かにRAMDISKだと全てメモリ上の話ですね。話題が長いので別途書いておきます。基本的にOpen,CloseとはOSが提供する機能であって、ディスクが提供する機能ではありません。完全にメモリだけで実現されているわけではありません。相関関係の表=ファイルテーブルはディスク上に書かれています。OSが提供する機能とりかいして問題ありません。ディスクシステム)の事です。略してしまってすみません。HDDの中には複数または1枚の円盤が入っています。ディスクシステムのOS円盤絵の書き込み装置円盤からなっています。いう便利な機能を提供しています。あ、自分の回答に作者さん以外がコメントできるんですね。すみません、知りませんでした。連投になってすみません。13:51:36たしかに、HDD=円盤ではなくて、HDDの中も階層構造になってますね。円盤の枚数と回転とか意識したことはありません。「Open,CloseとはOSが提供する機能であって、ディスクが提供する機能ではない」この一言に尽きると思いました。15:22:2915ptファイル(ディスク上のものも仮想のものも)はメモリに読み込む必要があります。そのメモリ上の場所を示すのがファイルポインタ(orハンドル)で、多くの言語ではファイルのオープン時に変数として割り当てられます。「この"text.txt"ってファイルを開いてよ」という依頼に対し、「じゃぁ、このfpっていう変数が指している場所に読み込んでやるよ」と教えてくれるわけです。多くの場合、読み書きが終わるとファイルを読み込むためのメモリ領域が不要になりますし、(ディスクなど)アクセス競合の管理があるメディアの場合は「もう使わないよ」と宣言してもらう必要があったり、必要がないにしても、並行に実行されている他の処理がスムーズに進む場合があります。プログラム内でクローズするとそのようなことが(必要なら)行われます。23:52:1515ptあえて、質問者の最初の問題提起にそって述べます。・ファイル読み取りは、【ディスク内のデータ領域のある特定のアドレスの】これらの1,0の並びを認識すること・ファイル書き込みは、【ディスク内のデータ領域のある特定のアドレスの】これらの並びを変更することですが、では、そのアドレスはどうやってディスク装置が知ることができるか、です。ユーザはファイル名しか与えていないからです。ディスク内には、ディレクトリ領域というのがあって、そこに「ファイル名とアドレスの対応表を格納することができます。対応ができていない(新規書き込み)なら対応表を作ります。あるときには、その対応表を読みます」。それらの0,1情報を読んだり書いたりしています。ディスク本体では、オープンやクローズでは、ディレクトリ領域に対する読み書きが発生しています。OSなので、ディスク内のOS領域に対して読み書きしています。オープン、クローズは主記憶内でもいろいろなことをやっていますが、ディスクへの物理的なアクセスは発生しています(それを仮想ディスクであるメモリ空間であるとか、細かくいえばありますが、おおざっぱな認識として)。ついでにいうと、「ファイル削除」は、決して、「データ領域のビットを全て0で埋め尽くす」ということでなく、ディレクトリ領域の対応表を消すことです。したがって、実際のディスクのアドレスは、別のファイルによって再利用されるかもしれないし、再利用されないで、元のデータが残っているかもしれない、です。オープン時のコンピュータ内の動きが少しイメージできました。「プログラムからは、ディスク本体の動きは知ることはできない」という意見と対立しますね。「ファイル名とアドレスの対応表」というのが鍵のようですね。これが、ファイルシステムということなのでしょうか。07:03:08「プログラムからは、ディスク本体の動きは知ることはできない」ですが、それが上位の、fopenを記してあるメイン・プログラムということなら、ディスクの実アドレスは知りません。fopenの引数で実アドレスを引いて、それをfwriteに渡してはいません。下位では知っています。下記コメントに書いた社長(?)と秘書の文書格納の比ゆでいえば、社長は文書が格納されている棚の書類ファイルのありかを知らない(関心がない)のと同じです。簡単のため、「ファイルの先頭アドレス」のように書きましたが、長いデータは、ディスク上の連続したアドレスに格納されるとはかぎらず、レコード単位に別々に格納されていますが、では、次のレコードはどこか、といったことまでファイルシステムは管理しています。02:36:2715pt既に色々な方の回答もありますので、ちょっと違う観点からの回答とします。自分もC言語を勉強し始めの頃は、同じような疑問を持ちました。自分の経験を踏まえて考えますと、コンピュータを勉強し始めの頃は、シンプルなモデル上で、プログラムをイメージしていたように思います。メモリ上には、自分のプログラムだけが配置され、入出力機能も独占しているような状態。あれば、やりたい事が、ディスクへの書き込みであれば、何故に、直接、ディスクへ書き込んでくれないの?といった感じです。初期のコンピュータでは、きっと、直接書き込んでいたように思います。みなさんが説明して頂いているように、低レベルでの読み書きは、実は、色々と面倒な手順を踏まないといけないんですね。「こんなの毎回やってられね~よ。面倒な事は代わりに誰かやってくれ~!!」そんなこんなでOSが登場するわけです。現在のOSは、色々と芸達者で、規模も大きくなっていますが、ここでの説明では、便利なサブルーチンの集合とでも捉えて下さい。ディスク読み書き用のサブルーチンを用意してもらったので、今までの面倒な作業をする代わりに、読み書きする前にサブルーチン(f)openを呼び出すと、OSは読み書きに必要な物をあれこれと用意してくれます。ファイルポインタやファイルハンドルといった物は、その必要な物のあれやこれやを参照する為の物です。その後、(f)readや(f)writeなどで、好きに読み書きを依頼すれば、OSが責任を持って面倒な作業を肩代わりしてくれます。OSは、調停役であり監視役でもありますので、他のプログラムとの兼ね合いやら権限のチェックやら、もしくはシステム全体の効率なども踏まえて、適切と思われるタイミングで物理的な読み書きを実行します。そのような理由もあって、依頼した内容が、即反映されるとは限りませんが、基本的にはOSが帳尻を合わせてくれます。(電源ぶち切りとかしなければ)で、最後に、読み書きが終了した時点で、(f)closeを呼び出すと、OSは、あれこれと用意した物を、綺麗に片付けます。これを忘れると、OSは、まだ読み書きを続けるつもりで、あれこれと必要な物を残したままにしておきます。昔、新米プログラマの時、closeを忘れ、メモリ不足でアプリが落ちた苦い経験がありますが、きっと、多分、そのような経験を重ねる事で、コンピュータの内部の動きが実感出来るような気もしますので、たくさん書いて、たくさん動かしてみる、というのも大事かな、なんて思います。http://d.hatena.ne.jp/rascal_k2/なるほどなるほど!「新米プログラマの時、closeを忘れ、メモリ不足でアプリが落ちた苦い経験がありますが、きっと、多分、そのような経験を重ねる事で、コンピュータの内部の動きが実感出来る」非常に実践的なアドバイスですね!苦労する、痛い目を見る、というのがポイントですね。すごく腑に落ちました。09:13:04乱暴、単純に言っちゃうと、ここで言うファイルオープンはHD等の記録メディアからデータをメインメモリ(もしくはキャッシュドライブ)に展開し、(メモリ上で)osやらアプリで操作できる状態にする事。いいんじゃないの?HDの方は、読み出しただけだからもちろんそのまま、書き込みされて初めてデータが変更される。16:57:03ちょっと横道にそれるけど、ファイルといってもHDD上だけじゃないし、ディスク上とも限らないし、物理的なものとも限らないです。#ttyとかNFSとか/proc以下とかファイルハンドルがあると何かと便利だから、でいいように思う。「HD等の記録メディアからデータをメインメモリ(もしくはキャッシュドライブ)に展開」これも、readの説明な気がします。ファイルといってもHDD上だけじゃないし、ディスク上とも限らないし、物理的なものとも限らないです。USBメモリとかSDカードにもファイルは置けるので、HDDだけじゃないのは理解しています。結局、open時に(HDD/USBメモリ/SDカード)はどう動くのか?というのが疑問なのです。08:47:49結局、「開く」「閉じる」という命名が、いらぬ誤解を招いてる気がしました。紙ファイルを開いたり閉じたりする場合、紙ファイルそのものがパタパタと動きます。この連想から、コンピュータのオープン・クローズはHDD内で何が動いてるのか?と考えてしまいました。end"とかだったら、もうちょっと違う角度から考えたかもしれません。ファイルシステムについて勉強しようと思います。hello.txtが「HDDへの書き込みである」という理解が短絡的でした。ミクロ的には、1書き込み用オープン、2書き込み、3クローズ、の3つの処理が行われていますね。USBメモリとかSDカードにもファイルは置けるので、HDDだけじゃないのは理解しています。他にプリンタや画面出力もファイルとして扱います。いうファイル(として扱えるもの)でCPUの情報が取得できます。ま、横道なんですけど。monyoさんのが分かりやすいかなと思いました。整理券とかチケットを発行する手続きの様なものかな。fopenすることを指していました。Excelなどのアプリの「ファイルを開く」についての質問ではありません。read)説明不足ですいませんでした。closeのようなものというイメージがわいてきました。open/closeはTCPでいうところのコネクション確立・切断みたいなものと考えればいいんですかね。02:32:45わかったこと:「読む」「書く」は、そもそもファイルを開かないとできない。ファイルを開くことなしに「読む」は成り立たない。私は「読む」「書く」を本当の意味で理解していなかった。下記の認識が間違っていた。「・ファイル読み取りは、これらの1,0の並びを認識すること・ファイル書き込みは、これらの並びを変更すること」ファイルの話と、1,0の並びの話は全くレイヤが異なる。ファイルを開く・読むとは、プログラム⇔OS間のファイルシステム処理についての話であって、物理メディア上での処理の話ではない。よってそのとき物理メディアがどう動くかはプログラムからは隠蔽されているので、知ることはできない。結論:私は、「開く」「読む」「書く」「閉じる」全部ひっくるめて、ファイルシステムを理解してないので勉強する必要がある。00:58:28こちらの比ゆでは。「紙ファイルを開いたり閉じたりする場合、紙ファイルそのものがパタパタと動きます。」あなたは秘書で、ある標題の文書を、適切な紙ファイルに綴じることを命じられたとします。書棚のどこにある紙ファイルに綴じればよいのでしょう。それは、書棚の端にある「目録ファイル」をあけて調べます。新規文書なら、「目録ファイル」に書き込みます。これが、回答12でいう、「ディレクトリ」の比ゆです。07:05:39>私は、「開く」「読む」「書く」「閉じる」全部ひっくるめて、ファイルシステムを理解してないので勉強する必要がある。「勉強する必要」はないと思いますが・・・。議論されているように、ファイル操作はOSレベルの話であってディスク自体の物理層の動きとは別の話です。物理層の動きはOSによって隠蔽されユーザからは見えなくなっていますが、それは「ユーザは知る必要がない」からこそ隠蔽されているわけで。興味を持って勉強する事は大いに結構だと思いますが、デバイスドライバを書くようなプログラマになりたいのでない限り、そこまで正確に知る必要はないと思います。07:11:05せめて、「何がわかってないのか」がわかるようになりたいのです。今はまだ、何がわからないのかが分からない状態です。01:44:23追記:最近システムコールというものについて勉強し始めたら、前よりはわかるようになってきました。「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。これ以上回答リクエストを送信することはできません。はてなココの「ともだち」を表示します。回答リクエストを送信したユーザーはいませんすでに登録されている方はこちらからログインツイートするウォッチリスト9人が登録していますこの質問に含まれるキーワードC言語298ハードディスク1113磁石78HDD2066ポインタ140コンピュータ917シェル235メディア1306関連質問tt4kmiNECのPC-9821Xs/U7Wのハードディスクに関してお尋ねします。...62006/04/20110ptakidePHPで簡体字をファイルに文字化けしないで書き出す方法を教えて下さい。...22008/12/1796ptsamasuyaHDDの調子が悪いです。DATAHDP-U20P)にイメージファイルを作成したいのですが,DriveImageはDOSで...142003/07/2840pturekatmacbookのHDDのバックアップについて教えてください。...232007/05/1070pttoranosuke記憶装置の記憶素子がROMのみで、まったくRAMをもたないコンピュータシステムは構成可能でしょうか?12001/09/05wawawa4行4列の行列の逆行列をC言語で求めたいのですが、できるだけ高速に動くデータ構造とアルゴリズムがしりたいです。}}${price}円{{/if}}知りたいことを検索してみようログインして回答する進んだ先のページで「許可する」ボタンを押してはてなによるアクセスを許可すると、認証が終わります。ご利用にあたりましては、はてな利用規約が適用されます。ご確認いただきご同意の上でご利用ください。