1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER:これまでのところ、それは可能性があります あなたのプログラムのほとんどこと 3 00:00:07,870 --> 00:00:10,170 ビットはかないされています。 4 00:00:10,170 --> 00:00:13,310 あなたはマリオや貪欲のようなプログラムを実行します。 5 00:00:13,310 --> 00:00:17,350 それは多分よう求め、何かを いくつかの情報をユーザー、 6 00:00:17,350 --> 00:00:20,400 画面にいくつかの出力を印刷し、 しかしその後、あなたのプログラムが終わった時、 7 00:00:20,400 --> 00:00:23,252 そこ証拠は本当にありません それは今までに最初の場所で実行されました。 8 00:00:23,252 --> 00:00:25,960 私は確信して、あなたが残っているかもしれませんが、意味します それは、ターミナルウィンドウで開きます 9 00:00:25,960 --> 00:00:29,770 あなたは、画面をクリアする場合は、あります それが存在したことを本当に証拠はありません。 10 00:00:29,770 --> 00:00:33,720 私たちは、格納する手段を持っていません 永続的な情報、情報 11 00:00:33,720 --> 00:00:36,890 それが私たちの後に存在します プログラムが実行を停止しています、 12 00:00:36,890 --> 00:00:39,241 または私達はここまで持っていません。 13 00:00:39,241 --> 00:00:41,490 幸いにもしかし、cがありません 能力を提供してくれる 14 00:00:41,490 --> 00:00:44,220 実装することによってこれを行うには 呼ばれるもの 15 00:00:44,220 --> 00:00:48,330 ファイル、基本的な構造 あなたが倍増するファイルを表します 16 00:00:48,330 --> 00:00:53,826 あなたがしている場合、お使いのコンピュータをクリックしてください グラフィカルユーザー環境に使​​用されます。 17 00:00:53,826 --> 00:00:55,700 一般的に作業しているとき Cで、私たちは実際にしています 18 00:00:55,700 --> 00:00:59,965 で作業することになるだろう ファイルをfiles--へのポインタstars-- 19 00:00:59,965 --> 00:01:02,090 少しを除いて 私たちは夫婦の話をするとき 20 00:01:02,090 --> 00:01:04,560 その機能の ファイルポインタを操作します。 21 00:01:04,560 --> 00:01:08,990 あなたは本当に掘っている必要はありません 理解ポインタへの深すぎます 22 00:01:08,990 --> 00:01:09,730 自分自身。 23 00:01:09,730 --> 00:01:12,870 小さな小さなビットがあります 我々は彼らの話をする場所、 24 00:01:12,870 --> 00:01:18,090 しかし、一般的にポインタをファイルし、 ポインタ、相互に関係しながら、 25 00:01:18,090 --> 00:01:20,290 まったく同じものではありません。 26 00:01:20,290 --> 00:01:22,440 >> 今、私はときに何を意味しています 私は、永続​​データを言いますか? 27 00:01:22,440 --> 00:01:23,650 永続データとは何ですか? 28 00:01:23,650 --> 00:01:25,232 なぜ我々はそれを気にしますか? 29 00:01:25,232 --> 00:01:27,190 こと、例えば、セイ あなたがプログラムを実行しています 30 00:01:27,190 --> 00:01:29,850 またはあなたが書き換えられました ゲームだプログラム、 31 00:01:29,850 --> 00:01:32,960 あなたはトラックを維持したいです ユーザーの移動のすべての 32 00:01:32,960 --> 00:01:36,620 多分何かがうまくいかない場合ように、 あなたはこのゲームの後にファイルを確認することができます。 33 00:01:36,620 --> 00:01:39,970 それはときに我々我々が何を意味するかです 永続データについて話しています。 34 00:01:39,970 --> 00:01:43,930 >> あなたを実行する過程で プログラムは、ファイルが作成されます。 35 00:01:43,930 --> 00:01:45,680 そして、ときにあなたのプログラム 実行を停止しています、 36 00:01:45,680 --> 00:01:48,689 そのファイルがまだシステムに存在します。 37 00:01:48,689 --> 00:01:50,230 そして、私たちはそれを見て、それを調べることができます。 38 00:01:50,230 --> 00:01:53,670 そしてその結果、プログラムは次のように設定されることになります いくつかの永続的なデータを作成しています、 39 00:01:53,670 --> 00:01:57,390 データはプログラムの後に存在します 実行が終了しました。 40 00:01:57,390 --> 00:02:02,320 >> 今動作し、これらの機能のすべて ファイルの作成および操作すると 41 00:02:02,320 --> 00:02:04,940 さまざまな方法でそれら 標準io.hに住んでいます、 42 00:02:04,940 --> 00:02:08,210 これは、ヘッダファイルであること あなたはおそらくポンドしてきました 43 00:02:08,210 --> 00:02:10,910 かなりの上部に含みます 多くのすべてのプログラムの 44 00:02:10,910 --> 00:02:14,130 それは、のいずれかが含まれているため、 私達のための最も便利な機能、 45 00:02:14,130 --> 00:02:16,130 printf関数、またすることができます 標準io.h.に住んでいます 46 00:02:16,130 --> 00:02:20,400 だから、含めるポンドにする必要はありません おそらく任意の追加ファイル 47 00:02:20,400 --> 00:02:23,540 ファイルポインタを操作するためです。 48 00:02:23,540 --> 00:02:29,980 >> 今すぐすべての単一のファイルポインタ機能、 またはすべての単一のファイルI / O、入力出力 49 00:02:29,980 --> 00:02:33,310 この関数は、として受け付け そのパラメータまたは入力の 50 00:02:33,310 --> 00:02:35,822 除くファイルpointer-- 1、fopenを、これのために 51 00:02:35,822 --> 00:02:38,280 あなたがファイルを取得するために使用するものです 最初の場所でのポインタ。 52 00:02:38,280 --> 00:02:41,010 しかし、あなたが開いた後に ファイルと、ファイルポインタを取得し、 53 00:02:41,010 --> 00:02:43,510 あなたがして、それらを渡すことができます 様々な関数の引数 54 00:02:43,510 --> 00:02:46,720 我々はについて話をするつもりです 今日だけでなく、他の多くの 55 00:02:46,720 --> 00:02:48,520 あなたがファイルを操作できるようにします。 56 00:02:48,520 --> 00:02:50,980 >> だから6はかなりあります 共通の基本的なもの 57 00:02:50,980 --> 00:02:52,870 私たちは、今日の話をするつもりだということ。 58 00:02:52,870 --> 00:02:57,160 fopenをとその仲間 関数fcloseは、fgetc関数 59 00:02:57,160 --> 00:03:02,670 その仲間関数fputcは、 とにfreadとそのコンパニオン機能、 60 00:03:02,670 --> 00:03:03,820 fwriteの。 61 00:03:03,820 --> 00:03:05,180 それでは、右のそれに取得してみましょう。 62 00:03:05,180 --> 00:03:07,050 >> fopen--それが何をするのでしょうか? 63 00:03:07,050 --> 00:03:10,050 まあ、それはファイルを開き、 あなたにそれへのファイルポインタを与え、 64 00:03:10,050 --> 00:03:14,000 あなたがしていることを使用できるように、 引数としてポインタをファイル 65 00:03:14,000 --> 00:03:16,730 他のファイルI / O関数のいずれか。 66 00:03:16,730 --> 00:03:19,100 最も重要なこと fopenをして覚えておきます 67 00:03:19,100 --> 00:03:24,222 後にあなたが開いているということです ファイルまたはここのような呼び出しを行いました、 68 00:03:24,222 --> 00:03:26,930 あなたは確認してくださいする必要があります そのあなたが戻ったポインタ 69 00:03:26,930 --> 00:03:28,320 nullに等しくありません。 70 00:03:28,320 --> 00:03:31,320 あなたは上のビデオを見ていない場合 ポインタは、これは意味を成さない場合があります。 71 00:03:31,320 --> 00:03:35,639 しかし、もしあなたが試してみて、間接参照 NULLポインタのリコール、 72 00:03:35,639 --> 00:03:38,180 あなたのプログラムはおそらく低下します セグメンテーション[聞こえません]。 73 00:03:38,180 --> 00:03:40,540 私たちは、ことを確認する私たち 正当なポインタのバックを得ました。 74 00:03:40,540 --> 00:03:43,665 時間の大半頂きます バック正当なポインタを得ています 75 00:03:43,665 --> 00:03:45,280 それが問題になることはありません。 76 00:03:45,280 --> 00:03:46,760 >> どのようにして、コールがfopenの作るのですか? 77 00:03:46,760 --> 00:03:48,051 これはかなりのようになります。 78 00:03:48,051 --> 00:03:52,690 ファイルのスターはptr-- PTR総称されます pointer--はfopenファイルの名前 79 00:03:52,690 --> 00:03:57,300 我々は、二つのことでファイル名を渡します 操作私達は着手したいと思います。 80 00:03:57,300 --> 00:04:01,690 だから私たちは次のようになります電話を持っている可能性があります this--ファイルスターPTR 1は、fopenのに等しいです 81 00:04:01,690 --> 00:04:04,040 FILE1.TXT。 82 00:04:04,040 --> 00:04:07,020 そして、私が選択した操作は、rです。 83 00:04:07,020 --> 00:04:08,639 >> だから、rはここにあるものだと思いますか? 84 00:04:08,639 --> 00:04:11,180 物事の種類、我々はどのようなものがあります ファイルに行うことができるのでしょうか? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 だから、rは我々の操作であります 我々は、ファイルを読みたいときに選択します。 87 00:04:17,500 --> 00:04:20,260 だから我々は、基本的に時だろう 我々はこのような呼び出しを行います 88 00:04:20,260 --> 00:04:25,440 自分自身のファイルポインタを取得します 我々は、情報を読み取ることができることなど 89 00:04:25,440 --> 00:04:27,770 FILE1.TXTから。 90 00:04:27,770 --> 00:04:34,190 >> 同様に、我々はファイルを開くことができ2.txt 書き込み用と私たちはPTR2を渡すことができ、 91 00:04:34,190 --> 00:04:38,210 私がここで作成したファイルポインタ、 その任意の関数の引数として 92 00:04:38,210 --> 00:04:40,080 情報をファイルに書き込みます。 93 00:04:40,080 --> 00:04:43,767 そして、書き込みと同様に、あります またオプションでは、追加します。 94 00:04:43,767 --> 00:04:45,600 違い 書き込み、追加 95 00:04:45,600 --> 00:04:50,920 あなたがファイルに書き込むときにということで、 あなたは書き込みのためにfopenの呼び出しを行う場合 96 00:04:50,920 --> 00:04:54,761 そのファイルはすでに、それはだ、存在します ファイル全体を上書きする予定。 97 00:04:54,761 --> 00:04:56,510 それは開始する予定です 非常に冒頭に、 98 00:04:56,510 --> 00:04:58,820 すべての情報を削除します それはすでにあります。 99 00:04:58,820 --> 00:05:02,210 >> あなたは追加のためにそれを開いた場合一方、 それはファイルの末尾に移動します 100 00:05:02,210 --> 00:05:04,340 すでにテキストがあるかどう それまたはそれに記載されている情報、 101 00:05:04,340 --> 00:05:06,040 それは、次に起動します そこからの書き込み。 102 00:05:06,040 --> 00:05:08,570 だから、のいずれかを失うことはありません あなたが前にやった情報。 103 00:05:08,570 --> 00:05:12,110 あなたが書いたり、追加したいかどうか ソートの状況によって異なります。 104 00:05:12,110 --> 00:05:16,840 しかし、あなたはおそらく何を知っていますよ 時が来れば右の操作です。 105 00:05:16,840 --> 00:05:18,020 だから、fopenのです。 106 00:05:18,020 --> 00:05:18,930 >> 何fcloseのは? 107 00:05:18,930 --> 00:05:21,600 まあ、かなり単に、FCLOSE 単にファイルポインタを受け付けます。 108 00:05:21,600 --> 00:05:24,000 そして、あなたが期待するかもしれないとして、 そのファイルを閉じます。 109 00:05:24,000 --> 00:05:29,270 我々は、ファイルを閉じしたらそして、私たちがすることはできません 、任意の複数のファイルI / O機能を実行します 110 00:05:29,270 --> 00:05:31,420 そのファイルには、読み取りまたは書き込み。 111 00:05:31,420 --> 00:05:36,444 我々は再び開く必要があります ために、別の時間を提出 112 00:05:36,444 --> 00:05:38,610 で作業を続行します それは、I / O機能を使用して。 113 00:05:38,610 --> 00:05:41,520 私たちが行っているそうfcloseの手段 このファイルでの作業。 114 00:05:41,520 --> 00:05:44,690 そして、我々が合格するために必要なすべてです ファイルポインタの名前。 115 00:05:44,690 --> 00:05:50,010 だから、カップルのスライド上の前、我々 読書のためのfopenedファイル1ドットテキスト 116 00:05:50,010 --> 00:05:52,854 私たちはそれを割り当てられました PTR1へのポインタをファイル。 117 00:05:52,854 --> 00:05:55,020 今、私たちは私たちがしていることを決定しました そのファイルから読み込み完了です。 118 00:05:55,020 --> 00:05:56,561 私たちはそれをこれ以上行う必要はありません。 119 00:05:56,561 --> 00:05:58,890 私達はちょうどPTR1をfcloseはすることができます。 120 00:05:58,890 --> 00:06:01,950 そして同様に、我々は可能性 他のものをfcloseは。 121 00:06:01,950 --> 00:06:02,450 大丈夫。 122 00:06:02,450 --> 00:06:03,700 だから、開閉ます。 123 00:06:03,700 --> 00:06:05,780 これらは、基本的な2つです 操作を開始します。 124 00:06:05,780 --> 00:06:08,050 >> 今、私たちは、実際にしたいです いくつかの興味深いものを行います、 125 00:06:08,050 --> 00:06:11,940 そして最初の関数は、我々はよ それはfgetc--である致します参照してください。 126 00:06:11,940 --> 00:06:14,110 ファイルには、文字を取得します。 127 00:06:14,110 --> 00:06:17,350 それは一般的にFGETC何 に翻訳するでしょう。 128 00:06:17,350 --> 00:06:20,190 生活の中でその目標はにあります 次の文字を読んで、 129 00:06:20,190 --> 00:06:22,079 または、これはあなたの非常にある場合 fgetc関数の最初の呼び出し 130 00:06:22,079 --> 00:06:23,870 特定のファイルのために、 最初の文字。 131 00:06:23,870 --> 00:06:26,210 しかし、その後、 あなたは、次のいずれかを取得 132 00:06:26,210 --> 00:06:31,500 そのファイルの非常に次の文字、 文字変数に格納します。 133 00:06:31,500 --> 00:06:34,490 私たちがここで行ったように、 チャーchが、fgetc関数に等しいです 134 00:06:34,490 --> 00:06:36,389 ファイルポインタの名前を渡します。 135 00:06:36,389 --> 00:06:38,180 繰り返しますが、それは非常にです 覚えてここで重要な 136 00:06:38,180 --> 00:06:41,430 持っているために、その この操作は成功し、 137 00:06:41,430 --> 00:06:45,690 ファイルポインタそのものに違いありません 読み込みのためにオープンされて。 138 00:06:45,690 --> 00:06:50,589 私たちは、ファイルから文字を読み取ることができません 私たちが書き込み用にオープンポインタ。 139 00:06:50,589 --> 00:06:52,630 だから、の一つです 関数fopenの制限、右? 140 00:06:52,630 --> 00:06:55,470 我々は制限する必要があります 自分自身にのみ実行します 141 00:06:55,470 --> 00:06:57,710 1ファイルポインタと一つの操作。 142 00:06:57,710 --> 00:07:00,220 私たちが読みたいと思った場合と 同じファイルからの書き込み、 143 00:07:00,220 --> 00:07:03,840 私たちは別々のオープン2を持っているでしょう 同じfile--へのファイルポインタ 144 00:07:03,840 --> 00:07:05,670 読書のための1つ、書き込みのための1つ。 145 00:07:05,670 --> 00:07:08,400 >> そこで再び、唯一の理由 私は今、それを持ち出します 146 00:07:08,400 --> 00:07:11,920 私たちは電話をかけるつもりなら理由 fgetc関数に、そのファイルポインタすまんすまん 147 00:07:11,920 --> 00:07:14,172 読み込みのためにオープンされて。 148 00:07:14,172 --> 00:07:15,880 そしてかなり単に、 私たちが行う必要があるすべて 149 00:07:15,880 --> 00:07:17,546 ファイルポインタの名前を渡しています。 150 00:07:17,546 --> 00:07:21,060 だから、文字chがfgetc関数PTR1に等しいです。 151 00:07:21,060 --> 00:07:23,200 >> それが私たちを得るために起こっています 次character-- 152 00:07:23,200 --> 00:07:25,575 または、再び、これは最初である場合 私たちはこのコールを行った時、 153 00:07:25,575 --> 00:07:29,750 何の最初character-- ファイルがPTR1によって指されています。 154 00:07:29,750 --> 00:07:32,210 それは、ファイル1ドットのテキストだったことを思い出してください。 155 00:07:32,210 --> 00:07:36,490 それは、その最初の文字を取得します 私たちは、変数CHに格納します。 156 00:07:36,490 --> 00:07:37,941 かなり簡単。 157 00:07:37,941 --> 00:07:40,190 だから我々は3つだけを見てきました 機能とすでに我々 158 00:07:40,190 --> 00:07:43,070 かなりきちんと何かを行うことができます。 159 00:07:43,070 --> 00:07:46,320 >> だから我々はこの能力を取る場合 文字を取得します 160 00:07:46,320 --> 00:07:48,943 我々ループは、私たちをit-- 文字を取得し続けます 161 00:07:48,943 --> 00:07:51,390 オーバーおよびファイルから オーバー、今over-- 162 00:07:51,390 --> 00:07:54,500 ひとつひとつを読むことができます ファイルの文字。 163 00:07:54,500 --> 00:07:58,670 そして、我々はすべての文字を印刷する場合 我々はそれを読む直後に、 164 00:07:58,670 --> 00:08:01,960 私たちは今、ファイルから読み込まれていると 画面にその内容を印刷しました。 165 00:08:01,960 --> 00:08:05,610 我々は効果的に連結されてきました 画面上でそのファイル。 166 00:08:05,610 --> 00:08:09,670 そして、それは何です Linuxのコマンドcatはありません。 167 00:08:09,670 --> 00:08:13,250 >> あなたがファイル名に猫を入力すると、それ 全体の内容を印刷します 168 00:08:13,250 --> 00:08:15,160 ターミナルウィンドウでファイルの。 169 00:08:15,160 --> 00:08:19,010 そして、ここではそのようにこの小さなループ、 コー​​ドの3行のみ、 170 00:08:19,010 --> 00:08:23,270 それが効果的に複製します Linuxコマンド猫。 171 00:08:23,270 --> 00:08:25,210 したがって、この構文は、かもしれません 少し奇妙に見えます、 172 00:08:25,210 --> 00:08:26,670 しかし、ここで、ここで何が起こっているかです。 173 00:08:26,670 --> 00:08:31,460 CHは、fgetcに等しいが、ptrがありません それは全体の一口だEOF--に等しく、 174 00:08:31,460 --> 00:08:34,669 しかし、ちょうどそれを打破しましょう それは、構文のは明らかです。 175 00:08:34,669 --> 00:08:37,169 私はそれを統合してきました スペースのために、 176 00:08:37,169 --> 00:08:39,049 それは少しですが、 構文的にトリッキー。 177 00:08:39,049 --> 00:08:41,194 >> グリーン右にあるので、この部分 今、それは何をしているのですか? 178 00:08:41,194 --> 00:08:42,860 まあ、それはちょうど私たちのfgetcを呼び出し、右ですか? 179 00:08:42,860 --> 00:08:44,530 私たちはその前に見てきました。 180 00:08:44,530 --> 00:08:49,500 これは1を取得するです ファイルから文字。 181 00:08:49,500 --> 00:08:53,220 その後、我々はそれを比較します EOFに対する文字。 182 00:08:53,220 --> 00:08:57,470 EOFだ特別な値です 標準io.hで定義されています 183 00:08:57,470 --> 00:08:59,390 ファイルの文字の終わりがあります。 184 00:08:59,390 --> 00:09:03,450 したがって、基本的に何が起こるだろう このループは、文字を読み取りますが、 185 00:09:03,450 --> 00:09:07,445 、EOFにそれを比較します ファイルの文字の終わり。 186 00:09:07,445 --> 00:09:10,070 一致しない場合、私たちは持っていません ファイルの終わりに達し、 187 00:09:10,070 --> 00:09:11,490 私たちは、その文字を印刷します。 188 00:09:11,490 --> 00:09:13,740 その後、我々は戻って行きますよ 再びループの始まり。 189 00:09:13,740 --> 00:09:18,310 私たちは、文字、チェックを取得します EOFに対して、というように、それをプリントアウトし、 190 00:09:18,310 --> 00:09:21,094 などというように、 そのようにをループ 191 00:09:21,094 --> 00:09:22,760 我々は、ファイルの最後に到達するまで。 192 00:09:22,760 --> 00:09:24,593 そしてそのポイントによって、 我々は、印刷してます 193 00:09:24,593 --> 00:09:26,210 ファイルの内容全体をアウト。 194 00:09:26,210 --> 00:09:29,450 だからもう一度、私たちは見てきました 関数fopen、fcloseは、とのfgetc 195 00:09:29,450 --> 00:09:34,950 すでに我々が複製することができます Linuxのターミナルコマンドを実行します。 196 00:09:34,950 --> 00:09:38,850 >> 私が最初に言ったように、 我々はfgetc関数とFPUTCを持っていました、 197 00:09:38,850 --> 00:09:41,860 そして、FPUTCは仲間でした fgetc関数の機能。 198 00:09:41,860 --> 00:09:44,880 そしてそう、ご想像の通り、 それは書き込みと同じです。 199 00:09:44,880 --> 00:09:49,440 それは私達が書くことができます ファイルへの単一の文字。 200 00:09:49,440 --> 00:09:53,290 >> 繰り返しますが、注意点があること、ちょうど それは、fgetcとあったように、ファイル 201 00:09:53,290 --> 00:09:56,660 我々はすまんすまんに書いていることになって 書き込み用または追加用にオープンしました。 202 00:09:56,660 --> 00:10:00,820 我々がしようと、ファイルにFPUTC使用している場合 我々は読み込みのためにオープンしたので、 203 00:10:00,820 --> 00:10:02,760 我々は苦しむことになるだろう 間違いのビット。 204 00:10:02,760 --> 00:10:04,440 しかし、呼び出しは非常に簡単です。 205 00:10:04,440 --> 00:10:08,000 FPUTC資本PTR2、すべて それを行うために起こっていることがあるのです 206 00:10:08,000 --> 00:10:12,040 手紙を書くつもり ファイルに2ドットへ 207 00:10:12,040 --> 00:10:14,760 の名前だったテキスト、 我々が開き、割り当てられたファイル 208 00:10:14,760 --> 00:10:17,280 PTR2へのポインタ。 209 00:10:17,280 --> 00:10:20,430 だから我々は書くつもりです 大文字のAは2ドットのテキストをファイルに追加します。 210 00:10:20,430 --> 00:10:24,592 そして、私たちは感嘆符を書きます 3ドットのファイルを指します 211 00:10:24,592 --> 00:10:27,330 PTR3によって指されたテキスト、。 212 00:10:27,330 --> 00:10:29,730 だからもう一度、ここに非常に簡単。 213 00:10:29,730 --> 00:10:32,727 >> しかし、今、私たちは別のことを行うことができます。 214 00:10:32,727 --> 00:10:34,560 我々は、この例を持っています 我々はわずかつもりでした 215 00:10:34,560 --> 00:10:38,950 猫を複製することができることについて Linuxのコマンド、プリントアウト1 216 00:10:38,950 --> 00:10:40,500 画面に。 217 00:10:40,500 --> 00:10:43,510 さて、今私たちは能力を持っていること ファイルから文字を読み取ります 218 00:10:43,510 --> 00:10:46,590 そして、、ファイルに文字を書き込みます なぜ我々はちょうどそれを代用しないでください 219 00:10:46,590 --> 00:10:50,720 FPUTCへの呼び出しでprintfのために呼び出します。 220 00:10:50,720 --> 00:10:54,090 >> そして今、我々は、CPを複製しましたが、 非常に基本的なLinuxコマンド 221 00:10:54,090 --> 00:10:59,100 我々は、約方法長い話をしたこと 前のLinuxでビデオを命じます。 222 00:10:59,100 --> 00:11:01,070 我々は効果的にしました 右ここことを二重化。 223 00:11:01,070 --> 00:11:04,790 私たちは、文字を読んでいるし、我々はしています 別のファイルにその文字を書き込みます。 224 00:11:04,790 --> 00:11:07,660 一つのファイルからの読み取り、書き込み 他に、何度も 225 00:11:07,660 --> 00:11:11,350 何度も何度も私たちはEOFを打つまで。 226 00:11:11,350 --> 00:11:14,250 私たちは、の最後に持っています 私たちは、からコピーしようとしているファイル。 227 00:11:14,250 --> 00:11:18,500 そして、それによって、私たちはすべて書かれています 我々は、ファイルに必要な文字の 228 00:11:18,500 --> 00:11:19,500 私たちが書いていること。 229 00:11:19,500 --> 00:11:24,270 だから、これはCP、Linuxのコピーコマンドです。 230 00:11:24,270 --> 00:11:26,550 >> の先頭に このビデオは、私は警告していました 231 00:11:26,550 --> 00:11:29,840 我々は話をすることを ポインタについて少し。 232 00:11:29,840 --> 00:11:32,480 私たちがしているのはここ、具体的です ポインタについて話をするつもり 233 00:11:32,480 --> 00:11:34,800 ファイルポインタに加えました。 234 00:11:34,800 --> 00:11:37,870 したがって、この関数は怖いのようなものを探します。 235 00:11:37,870 --> 00:11:39,120 これは、いくつかのパラメータを持っています。 236 00:11:39,120 --> 00:11:40,430 ここで起こっがたくさんあり​​ます。 237 00:11:40,430 --> 00:11:42,760 異なるがたくさんあり​​ます 色とテキスト。 238 00:11:42,760 --> 00:11:47,100 しかし、実際に、それだけです fgetc関数のジェネリック版 239 00:11:47,100 --> 00:11:50,110 それは、私たちはいずれかを取得することができます 情報量。 240 00:11:50,110 --> 00:11:53,560 私たちがしている場合、それは少し非効率的です 文字を一度に1つを得ます、 241 00:11:53,560 --> 00:11:55,770 ファイルを反復処理 1文字ずつ。 242 00:11:55,770 --> 00:12:00,230 それが取得するよりよいではないでしょう 一度に100時または500? 243 00:12:00,230 --> 00:12:03,250 >> さて、関数freadとそのコンパニオン機能 私たちが話しましょう​​fwriteの、 244 00:12:03,250 --> 00:12:05,490 第二に、私たちはちょうどそれをすることができます。 245 00:12:05,490 --> 00:12:08,480 我々は、任意の量を読み取ることができます ファイルからの情報の 246 00:12:08,480 --> 00:12:10,290 私たちはどこかに一時的に保管します。 247 00:12:10,290 --> 00:12:12,980 代わりに単にすることができるという 単一の変数でそれに合わせ、 248 00:12:12,980 --> 00:12:15,790 我々は、配列に格納する必要があるかもしれません。 249 00:12:15,790 --> 00:12:19,980 だから、我々は4で通過します ポインタをfread--の引数 250 00:12:19,980 --> 00:12:23,940 私たちがいる場所へ 情報を保存しようと、 251 00:12:23,940 --> 00:12:29,180 方法大きい情報の各ユニット 、情報のどのように多くの単位になります 252 00:12:29,180 --> 00:12:35,192 我々は取得したい、との どのファイル私たちはそれらを取得したいです。 253 00:12:35,192 --> 00:12:37,150 おそらく最高示します ここでの例です。 254 00:12:37,150 --> 00:12:41,640 それでは、私たちが宣言することとしましょう 10整数の配列。 255 00:12:41,640 --> 00:12:45,080 我々だけで宣言しました 任意スタックARR 10をint型。 256 00:12:45,080 --> 00:12:46,970 だから、非常に簡単です。 257 00:12:46,970 --> 00:12:51,970 今、私たちはあるものの何をやっています frecall我々はint型のサイズを読んでいるされています 258 00:12:51,970 --> 00:12:54,180 時間情報の10バイト。 259 00:12:54,180 --> 00:12:59,040 それはだfour-- int型のサイズがあること Cの整数のサイズ。 260 00:12:59,040 --> 00:13:02,790 >> それでは、私たちがやっていることは私たちが読んでいるあります 情報の価値が40バイト 261 00:13:02,790 --> 00:13:05,850 ファイルからptrが。 262 00:13:05,850 --> 00:13:08,600 そして、我々はそれらを保存しています どこかに40バイト 263 00:13:08,600 --> 00:13:12,080 我々は取っておいた場所 メモリの価値は40バイト。 264 00:13:12,080 --> 00:13:15,970 幸いなことに、我々はすでにによってそれをやりました 右が編曲、その配列を宣言。 265 00:13:15,970 --> 00:13:19,770 それが保持​​することが可能です 10 4バイト単位。 266 00:13:19,770 --> 00:13:22,860 そのように合計では、40を保持することができ バイト情報の価値があります。 267 00:13:22,860 --> 00:13:26,540 そして、我々は今、40バイトを読んでいます ファイルからの情報の、 268 00:13:26,540 --> 00:13:30,330 私たちは、ARRでそれを保存しています。 269 00:13:30,330 --> 00:13:35,470 >> そのポインタのビデオからリコール そのようなARRとして配列の名前、 270 00:13:35,470 --> 00:13:38,370 本当にただのポインタであります その最初の要素へ。 271 00:13:38,370 --> 00:13:43,680 だから我々が編曲を渡すとき、私たちは ポインタを渡し、実際には、あります。 272 00:13:43,680 --> 00:13:46,120 >> 同様に、私たちはthis--を行うことができます 私たちは必ずしもありません 273 00:13:46,120 --> 00:13:51,200 スタック上に私たちのバッファを保存する必要があります。 274 00:13:51,200 --> 00:13:54,990 また、動的に割り当てることができ mallocを使用して、このようなバッファー、。 275 00:13:54,990 --> 00:13:57,340 覚えて、ときに我々 動的にメモリを割り当て、 276 00:13:57,340 --> 00:14:00,550 我々は上でそれを保存しています ヒープ、​​スタックではありません。 277 00:14:00,550 --> 00:14:02,110 しかし、それはまだバッファです。 278 00:14:02,110 --> 00:14:06,810 >> それでも、この場合には、 情報の640バイトを保持 279 00:14:06,810 --> 00:14:09,230 ダブルは8バイトを占有しますので。 280 00:14:09,230 --> 00:14:11,570 そして、我々は彼らの80のために求めています。 281 00:14:11,570 --> 00:14:13,770 私たちは、スペースを持ちたいです 80倍を保持します。 282 00:14:13,770 --> 00:14:17,210 だから80回8 640バイトの情報です。 283 00:14:17,210 --> 00:14:21,880 そして、関数freadへの呼び出しがあります 情報の640バイトを収集 284 00:14:21,880 --> 00:14:27,770 ファイルからの指します PTRレコードおよびARR2に今それを保存します。 285 00:14:27,770 --> 00:14:32,770 >> 今、私たちはまた、関数freadを扱うことができます ただfgetc関数の呼び出しなどがあります。 286 00:14:32,770 --> 00:14:37,140 この場合、私達はちょうどしようとしています ファイルから1文字を取得します。 287 00:14:37,140 --> 00:14:40,070 そして、我々は必要はありません 文字を格納する配列。 288 00:14:40,070 --> 00:14:43,170 私達はちょうどそれを保存することができます 文字変数。 289 00:14:43,170 --> 00:14:46,390 >> キャッチは、しかし、ということです 私たちは、変数を持っている場合、 290 00:14:46,390 --> 00:14:50,290 我々はに渡す必要があります その変数のアドレス 291 00:14:50,290 --> 00:14:52,550 リコールそのため、 関数freadの最初の引数 292 00:14:52,550 --> 00:14:59,210 場所やメモリへのポインタであります 我々は情報を保存する場所。 293 00:14:59,210 --> 00:15:01,550 再び、名前 配列はポインタです。 294 00:15:01,550 --> 00:15:04,200 だから我々はアンパサンド配列をする必要はありません。 295 00:15:04,200 --> 00:15:07,270 しかし、C、文字c ここでは、配列ではありません。 296 00:15:07,270 --> 00:15:08,390 それはちょうど変数です。 297 00:15:08,390 --> 00:15:11,840 そして、私たちは渡す必要があります 示すために、アンパサンドC 298 00:15:11,840 --> 00:15:15,350 それは私たちが望むのアドレスだと この情報の1バイトを格納するために、 299 00:15:15,350 --> 00:15:20,479 、この1文字 我々はPTRから収集しています。 300 00:15:20,479 --> 00:15:22,270 私は通過するだろうFwrite-- このもう少し 301 00:15:22,270 --> 00:15:25,440 quickly--はかなりあります 関数freadの、完全に同等 302 00:15:25,440 --> 00:15:27,720 それは書き込みのためだ除き だけではなく、読書の 303 00:15:27,720 --> 00:15:31,610 other--のように、私たちはオープン持っていました そして、近く、文字を取得し、 304 00:15:31,610 --> 00:15:32,530 文字を書きます。 305 00:15:32,530 --> 00:15:35,040 今では、任意の取得です 情報の量は、 306 00:15:35,040 --> 00:15:37,170 情報の右の任意の量。 307 00:15:37,170 --> 00:15:39,790 だから前と同じように、我々はできます 10整数の配列を持っています 308 00:15:39,790 --> 00:15:43,210 我々はすでに持っている場所 情報は、おそらく、格納されています。 309 00:15:43,210 --> 00:15:46,580 >> それはおそらく、コードのいくつかの行でした それは、これら二つの間に行く必要があります 310 00:15:46,580 --> 00:15:49,990 私はARR埋める場所 意味のある何か。 311 00:15:49,990 --> 00:15:51,880 私は10の異なる整数でそれを埋めます。 312 00:15:51,880 --> 00:15:54,920 その代わりに、私は何です やっARRから書いています 313 00:15:54,920 --> 00:15:58,600 そして、ARRからの情報を収集します。 314 00:15:58,600 --> 00:16:02,390 そして、私はその情報を取っています そして、ファイルにそれを置きます。 315 00:16:02,390 --> 00:16:05,410 >> だからではなく、それがからであることの バッファへのファイル、 316 00:16:05,410 --> 00:16:08,790 我々は、今から行っています ファイルへのバッファー。 317 00:16:08,790 --> 00:16:10,580 だから、ちょうど逆です。 318 00:16:10,580 --> 00:16:16,680 直前のようなので、再度、我々はできます また、メモリのヒープチャンクを持っています 319 00:16:16,680 --> 00:16:19,600 我々は動的にしたこと 割り当てられ、そこから読み込みます 320 00:16:19,600 --> 00:16:21,570 そして、ファイルにそれを書き込みます。 321 00:16:21,570 --> 00:16:24,900 >> そして、我々はまた、単一の変数を持っています 1バイトを保持することができます 322 00:16:24,900 --> 00:16:27,200 そのような文字として、情報の。 323 00:16:27,200 --> 00:16:29,830 しかし、再び、我々はで渡す必要があります その変数のアドレス 324 00:16:29,830 --> 00:16:31,840 我々はそれから読みたいとき。 325 00:16:31,840 --> 00:16:35,280 だから我々は情報を書き込むことができます そのアドレスで私たちを見つけます 326 00:16:35,280 --> 00:16:39,050 ファイルポインタ、PTRへ。 327 00:16:39,050 --> 00:16:41,630 >> 他の多くがあります 大きなファイルI / O機能 328 00:16:41,630 --> 00:16:44,650 それは他にも色々なことを行います ものは、私たちは今日の話をしました。 329 00:16:44,650 --> 00:16:46,450 もののカップル あなたは便利かもしれません 330 00:16:46,450 --> 00:16:50,840 関数fgetsとfputsは、 同等です 331 00:16:50,840 --> 00:16:56,190 fgetc関数とFPUTCのが、読書のための ファイルから単一の文字列。 332 00:16:56,190 --> 00:16:59,020 単一の文字の代わりに、 それは、文字列全体を読み込みます。 333 00:16:59,020 --> 00:17:02,940 基本的には可能に関数fprintf、 あなたはファイルに書き込むのprintfを使用しています。 334 00:17:02,940 --> 00:17:05,619 だから、あなたが行うことができます同じように 使用して変数置換 335 00:17:05,619 --> 00:17:09,900 プレースホルダパーセントiと printf関数で%のD、およびように、 336 00:17:09,900 --> 00:17:14,690 あなたは、同様に取ることができます printfの文字列と印刷何か 337 00:17:14,690 --> 00:17:16,800 ファイルにそのような。 338 00:17:16,800 --> 00:17:20,720 >> あなたはDVDプレーヤーを持っている場合fseek-- 私は通常here--使用アナロジーがあります 339 00:17:20,720 --> 00:17:23,109 ソートのあなたを使用してのようなものです 巻き戻し、早送り 340 00:17:23,109 --> 00:17:25,819 映画の周りを移動するためのボタン。 341 00:17:25,819 --> 00:17:28,369 同様に、ファイルを移動することができます。 342 00:17:28,369 --> 00:17:30,250 内部のものの一つ そのファイル構造 343 00:17:30,250 --> 00:17:34,270 あなたは指標であるため、そのCが作成されます あなたはファイルのどこにいるの。 344 00:17:34,270 --> 00:17:36,420 あなたは非常にあり バイトはゼロで、始まりますか? 345 00:17:36,420 --> 00:17:39,290 あなたがバイト100にあり、 バイト千、というように? 346 00:17:39,290 --> 00:17:44,340 あなたは、任意に移動するためにfseek関数を使用することができます 前方または後方にそのインジケータ。 347 00:17:44,340 --> 00:17:46,744 >> そして再び、FTELL DVDプレーヤーと同様に、 348 00:17:46,744 --> 00:17:49,660 伝え少し時計のようなものです あなたどのように多くの分と秒あなた 349 00:17:49,660 --> 00:17:52,480 特定の映画にしています。 350 00:17:52,480 --> 00:17:56,990 同様に、ftellはどのように説明します あなたがファイルにあるバイト数。 351 00:17:56,990 --> 00:18:00,210 FEOFは異なるバージョンです あなたがきたかどうかを検出します 352 00:18:00,210 --> 00:18:01,700 ファイルの終わりに到達しました。 353 00:18:01,700 --> 00:18:03,600 ferror関数であります あなたが使用することができます 354 00:18:03,600 --> 00:18:06,959 何かが持っているかどうかを検出します ファイルでの作業間違って。 355 00:18:06,959 --> 00:18:08,750 再び、これはただであります 表面を傷つけ。 356 00:18:08,750 --> 00:18:12,730 もっとたくさんのファイルは、I / Oまだあります 標準io.h.の関数 357 00:18:12,730 --> 00:18:16,620 しかし、これはおそらくあなたを取得します ファイルポインタで働き始めました。 358 00:18:16,620 --> 00:18:17,640 私はダグロイドです。 359 00:18:17,640 --> 00:18:19,750 これはCS50です。 360 00:18:19,750 --> 00:18:21,669