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 رفتن به کار کردن با اشاره گر به فایل ها فایل 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 اشاره گر فایل به جز برای یکی، 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 >> بنابراین شش وجود دارد بسیار آنهایی که پایه مشترک 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 است به تهی برابر است. 70 00:03:28,320 --> 00:03:31,320 اگر شما این ویدئو را تماشا نیست در اشاره گر، این ممکن است معنی ندارد. 71 00:03:31,320 --> 00:03:35,639 اما اگر شما سعی می کنید و ارجاع فراخوان اشاره گر تهی، 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 به یک عمومی نام برای فایل اشاره گر 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 کسانی هستند که دو پایه شروع عملیات. 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 یک عملیات با یک اشاره گر فایل. 142 00:06:57,710 --> 00:07:00,220 اگر ما می خواستیم به خواندن و ارسال از همان فایل، 143 00:07:00,220 --> 00:07:03,840 ما باز دو جداگانه اشاره گر فایل به همان file-- 144 00:07:03,840 --> 00:07:05,670 یکی برای خواندن، یکی برای نوشتن. 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 کاراکتر برابر ptr1 fgetc خواندن. 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 بنابراین ما فقط در سه نگاه توابع و در حال حاضر ما 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 و این چیزی است که لینوکس دستور 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 و به این ترتیب این حلقه کوچک در اینجا، تنها سه خط کد، 170 00:08:19,010 --> 00:08:23,270 اما به طور موثر تکراری دستور cat لینوکس است. 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 آن را به دست آوردن یک شخصیت از فایل. 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 و در حال حاضر ما می توانیم تکراری یک دستور ترمینال لینوکس. 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 رفتن به ارسال نامه به A را به فایل 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 بنابراین ما در حال رفتن به ارسال سرمایه به فایل 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 در مورد این که قادر به تکثیر گربه فرمان لینوکس، که چاپ 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 پاسخ به printf با یک تماس به fputc. 220 00:10:50,720 --> 00:10:54,090 >> و در حال حاضر ما CP کپی کردید، یک دستور بسیار لینوکس 221 00:10:54,090 --> 00:10:59,100 که ما در مورد صحبت راه طولانی پیش در دستورات لینوکس ویدیو. 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، فرمان لینوکس کپی است. 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 این می تواند یک کمی ناکارآمد اگر ما گرفتن شخصیت در یک زمان، 241 00:11:53,560 --> 00:11:55,770 تکرار از طریق فایل یکی از شخصیت ها در یک زمان. 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 و بنابراین، ما در چهار تصویب استدلال به 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. 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 اندازه بودن INT four-- که به اندازه یک عدد صحیح در 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 خوشبختانه، ما در حال حاضر انجام که توسط اعلام ARR، که آرایه سمت راست وجود دارد. 265 00:13:15,970 --> 00:13:19,770 که قادر به برگزاری است 10 واحد چهار بایت. 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 تا زمانی که ما در ARR عبور وجود دارد، ما هستند، در واقع، عبور در یک اشاره گر. 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 به دلیل دو برابر طول می کشد تا هشت بایت است. 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 در این مورد، ما فقط سعی به یکی از شخصیت از فایل. 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، شخصیت ج در اینجا، یک آرایه است. 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 که آدرس که در آن ما می خواهیم برای ذخیره این یک بایت از اطلاعات، 299 00:15:15,350 --> 00:15:20,479 این یکی از شخصیت ها که ما در حال جمع آوری از 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 و به جای آن، آنچه من انجام شده است از ورود نوشتن 313 00:15:54,920 --> 00:15:58,600 و جمع آوری اطلاعات از ورود. 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 >> و ما نیز یک متغیر واحد قادر به برگزاری یک بایت 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 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 >> 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، بایت 1،000، و غیره؟ 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