SPEAKER: تا کنون، این احتمال وجود دارد که بسیاری از برنامه های خود را اند کمی زودگذر بوده است. شما یک برنامه مثل ماریو و یا حریص را اجرا کنید. آن چیزی، شاید دهید کاربر برای برخی از اطلاعات، چاپ برخی از خروجی به صفحه نمایش، اما پس از آن که برنامه شما را بیش از، واقعا هیچ شواهدی وجود دارد وجود دارد آن را همیشه در وهله اول اجرا شد. منظور من، مطمئن باشید، شما ممکن است را ترک کرده اند آن را در پنجره ترمینال باز کنید، اما اگر شما صفحه نمایش خود را روشن وجود دارد، واقعا هیچ مدرکی که وجود داشته است. ما با استفاده از ذخیره سازی ندارد اطلاعات مداوم، اطلاعات که پس از ما وجود دارد برنامه در حال اجرا را متوقف کرده است، و یا ما تا به این نقطه ندارد. خوشبختانه هر چند، C آیا ما با توانایی ارائه برای انجام این کار با اجرای چیزی به نام یک فایل، یک ساختار است که اساسا نشان دهنده یک فایل که شما دو برابر با کلیک بر روی کامپیوتر شما، اگر شما با استفاده از یک محیط گرافیکی کاربر. به طور کلی در هنگام کار با c، ما در واقع هستید رفتن به کار کردن با اشاره گر به فایل ها فایل stars-- به جز کمی هنگامی که ما در مورد یک زن و شوهر صحبت از توابع است که کار با اشاره گرها فایل. شما لازم نیست به واقعا حفر به درک عمیق اشاره گر بیش از حد خود را دارند. یک کمی ریزه کمی وجود دارد که در آن ما را در مورد آنها صحبت می کنید، اما به طور کلی فایل اشاره گر و اشاره گرها، در حالی که مرتبط، دقیقا همان چیزی نیست. در حال حاضر چه معنی وقتی که من می گویم داده های پایدار؟ داده های پایدار چیست؟ چرا ما در مورد آن اهمیت می دهند؟ می گویند، که برای مثال، شما در حال اجرا یک برنامه و یا شما بازنویسی یک برنامه ای است که یک بازی است، و شما می خواهید برای پیگیری از همه از حرکت کاربر تا که شاید اگر چیزی را اشتباه می رود، شما می توانید فایل بعد از بازی بررسی می کند. این چیزی است که منظور ما در مورد داده های پایدار صحبت کنید. در این دوره از در حال اجرا خود را برنامه، یک فایل ایجاد می شود. و هنگامی که برنامه های خود را در حال اجرا را متوقف کرده است، که هنوز هم فایل بر روی سیستم شما وجود دارد. و ما می توانیم به آن نگاه کنید و بررسی آن. و به طوری که برنامه خواهد بود به راه برخی داده های پایدار ایجاد کرده اند، داده ها پس از برنامه وجود داشته باشد به پایان رسید در حال اجرا. در حال حاضر تمام این توابع که کار با ایجاد فایل های و دستکاری آنها به روش های مختلف در io.h استاندارد زندگی می کنند، که یک فایل هدر است که شما به احتمال زیاد پوند بوده است از جمله در بالای بسیار همه از برنامه های خود را زیرا حاوی یکی از ترین توابع مفید برای ما، تابع () printf، که همچنین اجازه می دهد زندگی در io.h. استاندارد بنابراین شما لازم نیست که به پوند شامل هر گونه فایل های اضافی احتمالا به منظور کار با اشاره گرها فایل. در حال حاضر هر تابع اشاره گر فایل، و یا هر فایل تنها I / O، ورودی خروجی تابع، می پذیرد به عنوان یکی از پارامترها یا ورودی آن اشاره گر فایل به جز برای یکی، fopen، که چیزی است که شما با استفاده از دریافت فایل اشاره گر را در وهله اول. اما پس از شما باز ام فایل و شما اشاره گر فایل را دریافت کنید، بعد از آن شما می توانید آنها را به عنوان عبور استدلال به توابع مختلف ما قصد داریم به بحث در مورد امروز، به عنوان همچنین بسیاری دیگر به طوری که شما می توانید با فایل کار می کنند. بنابراین شش وجود دارد بسیار آنهایی که پایه مشترک که ما قصد داریم در مورد امروز صحبت کنید. fopen و همدم آن تابع fclose، fgetc خواندن و آن fputc تابع همدم، و fread و عملکرد آن، fwrite. بنابراین اجازه دهید حق را به آن را دریافت کنید. fopen-- چه کاری انجام میدهد؟ خوب، آن یک فایل باز می شود و آن را به شما می دهد یک اشاره گر فایل را به آن، به طوری که بعد از آن شما می توانید استفاده کنید که فایل اشاره گر به عنوان یک استدلال به هر یک از فایل های دیگر I / O توابع. مهم ترین چیز به یاد داشته باشید با fopen است که پس از شما باز کرده اند فایل ها و یا ساخته شده یک تماس مانند یک در اینجا، شما نیاز به بررسی تا مطمئن شوید که اشاره گر است که شما رو است به تهی برابر است. اگر شما این ویدئو را تماشا نیست در اشاره گر، این ممکن است معنی ندارد. اما اگر شما سعی می کنید و ارجاع فراخوان اشاره گر تهی، برنامه خود را احتمالا رنج می برند یک تقسیم بندی [نامفهوم]. ما می خواهیم به مطمئن شوید که ما یک اشاره گر تماس مشروع است. اکثریت قریب به اتفاق از زمان ما یک اشاره گر مشروع بدست تماس و از آن خواهد شد یک مشکل نیست. پس چگونه ما را یک به fopen؟ به نظر می رسد بسیار بسیار شبیه به این. ستاره فایل ptr-- ptr به یک عمومی نام برای فایل اشاره گر fopen و ما در دو چیز عبور، نام فایل و عمل ما می خواهیم به انجام. بنابراین ما ممکن است یک تماس که شبیه اند this-- فایل ستاره PTR 1 برابر fopen file1.txt. و عملیات من را انتخاب کرده ام R است. بنابراین چه چیزی شما فکر می کنم R است که در اینجا؟ انواع چیز ها چه هستند ما ممکن است قادر به انجام به فایل های. بنابراین R عملیات این است که ما انتخاب کنید که ما می خواهم به خواندن یک فایل. بنابراین ما می در واقع زمانی که ما را یک مثل این گرفتن خود یک اشاره گر فایل چنین است که ما پس از آن می تواند خواندن اطلاعات از file1.txt. به طور مشابه، ما می تواند فایل 2.txt باز برای نوشتن و بنابراین ما می توانیم عبور ptr2، اشاره گر فایل را من در اینجا ایجاد کرده اید، به عنوان آرگومان به تابع است که هر اطلاعات به یک فایل می نویسد. و شبیه به نوشتن وجود دارد، همچنین گزینه ای برای اضافه، یک. تفاوت میان نوشتن و اضافه این است که هنگامی که شما به یک فایل ارسال، اگر شما یک تماس را به fopen برای نوشتن و آن فایل از قبل وجود دارد، آن را رفتن به بازنویسی کل فایل. آن را به شروع در آغاز، حذف تمام اطلاعات که در حال حاضر وجود دارد. در حالی که اگر شما آن را باز برای اضافه، آن را به انتهای فایل بروید اگر در حال حاضر وجود دارد در متن آن و یا اطلاعات در آن، و پس از آن شروع خواهد شد نوشتن وجود دارد. بنابراین شما خواهد شد هر یک از از دست دادن نیست اطلاعات شما را قبل انجام داده ام. آیا شما می خواهید به ارسال و یا اضافه مرتب کردن بر اساس در مورد وضعیت بستگی دارد. اما شما احتمالا می دانید چه عمل حق است که زمان می آید. به طوری که fopen. چه در مورد fclose؟ خوب، خیلی ساده، fclose فقط اشاره گر فایل را می پذیرد. و همانطور که انتظار می رود، آن را می بندد که فایل. و زمانی که ما یک فایل بسته اید، ما می توانیم انجام هر گونه فایل های بیشتر I / O توابع، خواندن یا نوشتن در آن فایل. ما باید به دوباره باز فایل زمان دیگری به منظور برای ادامه کار با آن را با استفاده از توابع I / O. معنای fclose ما در حال انجام کار با این فایل. و همه ما نیاز به تصویب در است نام یک اشاره گر فایل. بنابراین در چند اسلاید قبل، ما fopened فایل متنی 1 نقطه برای خواندن و ما اختصاص داده است که فایل اشاره گر به ptr1. در حال حاضر ما تصمیم گرفتیم ما انجام می شود خواندن از آن فایل. ما لازم نیست برای انجام هر گونه اطلاعات بیشتر با آن است. ما می توانیم ptr1 فقط fclose. و به همین ترتیب، می تواند ما fclose آنهایی که دیگر. خیلی خوب. به طوری که باز و بسته شدن. کسانی هستند که دو پایه شروع عملیات. در حال حاضر ما به واقع می خواهم انجام برخی چیزهای جالب، و تابع اول است که ما دید که انجام خواهد داد که fgetc-- است فایل دریافت یک شخصیت. این چیزی است که به طور کلی fgetc خواندن به ترجمه کنید. هدف آن در زندگی این است خواندن کاراکتر بعدی، و یا اگر این است که بسیار خود را اولین تماس به fgetc خواندن برای یک فایل خاص، شخصیت اول. اما پس از آن بعد از آن، شما یک بعدی را دریافت کنید، شخصیت بعد از آن فایل، و آن را در یک متغیر شخصیت. همانطور که در اینجا انجام داده ام، CH کاراکتر برابر fgetc خواندن، تصویب به نام یک اشاره گر فایل. باز هم، آن را بسیار در اینجا به یاد داشته باشید مهم که به منظور این عملیات موفق، اشاره گر فایل خود را حتما برای خواندن باز شده است. ما نمی توانیم یک شخصیت از یک فایل به عنوان خوانده شده اشاره گر است که ما برای نوشتن باز. به طوری که یکی از این محدودیت های fopen، درست است؟ ما برای محدود خودمان را به تنها انجام یک عملیات با یک اشاره گر فایل. اگر ما می خواستیم به خواندن و ارسال از همان فایل، ما باز دو جداگانه اشاره گر فایل به همان file-- یکی برای خواندن، یکی برای نوشتن. پس دوباره، تنها به این دلیل من را که در حال حاضر چرا که اگر ما قصد داریم تا یک تماس به fgetc خواندن، که حتما اشاره گر فایل برای خواندن باز شده است. و پس از آن بسیار به سادگی، همه ما باید انجام دهیم است تصویب در نام اشاره گر فایل. بنابراین CH کاراکتر برابر ptr1 fgetc خواندن. که رفتن به ما character-- بعدی و یا دوباره، اگر این اولین زمان ما این ساخته شده است، character-- اول هر فایل است که توسط ptr1 اشاره کرد. به یاد بیاورید که آن فایل 1 نقطه متن بود. این اولین شخصیت که دریافت کنید و ما آن را در متغیر ذخیره CH. بسیار ساده. بنابراین ما فقط در سه نگاه توابع و در حال حاضر ما می توانید چیزی بسیار شسته و رفته است. بنابراین اگر ما این توانایی گرفتن یک شخصیت و ما حلقه it-- بنابراین ما همچنان به شخصیت از یک فایل و و در حال حاضر ما over-- می توانید هر عنوان خوانده شده شخصیت از یک فایل. و اگر ما چاپ هر شخصیت بلافاصله پس از ما آن را بخوانید، ما در حال حاضر از یک فایل را خوانده و به روی صفحه نمایش چاپ محتویات آن. ما به طور موثر الحاق به که فایل را بر روی صفحه نمایش. و این چیزی است که لینوکس دستور cat می کند. اگر شما از نوع گربه در نام فایل آن، چاپ خواهد شد کل مطالب از فایل در پنجره ترمینال خود را. و به این ترتیب این حلقه کوچک در اینجا، تنها سه خط کد، اما به طور موثر تکراری دستور cat لینوکس است. بنابراین این نحو ممکن نگاه کمی عجیب و غریب، اما در اینجا آنچه در اینجا اتفاق می افتد. در حالی که CH برابر fgetc خواندن، PTR است برابر با EOF-- آن را یک لقمه کل، اما اجازه دهید آن را شکستن تنها پس از آن در نحو روشن است. من آن را تثبیت ام به خاطر فضا، اگر چه آن را کمی نحوی روی حیله و تزویر. بنابراین این بخش در سمت راست سبز در حال حاضر، چه چیزی است که انجام می دهند؟ خوب، که فقط تماس fgetc خواندن ما، درست است؟ ما دیده ایم که قبل از. آن را به دست آوردن یک شخصیت از فایل. پس از آن مقایسه کنیم که شخصیت برابر EOF. EOF ارزش ویژه ای است که تعریف شده در io.h استاندارد، که پایان شخصیت فایل است. بنابراین اساسا چه اتفاقی خواهد افتاد است این حلقه یک شخصیت به عنوان خوانده شده، مقایسه آن را به EOF، در پایان شخصیت فایل. اگر آنها با هم مطابقت ندارند، بنابراین ما باید نه در پایان از فایل رسیده، ما که شخصیت را از چاپ. سپس ما تماس رفتن به ابتدای حلقه دوباره. ما یک شخصیت را دریافت، بررسی در برابر EOF، آن را چاپ، و غیره و غیره و غیره، حلقه از طریق در راه است که تا زمانی که ما در پایان از فایل رسیدهاید. و پس از آن در آن زمان، ما چاپ شده اند از کل محتویات فایل. پس دوباره، تنها دیده ام fopen، fclose و fgetc خواندن و در حال حاضر ما می توانیم تکراری یک دستور ترمینال لینوکس. همانطور که من در ابتدا گفت، ما fgetc خواندن و fputc حال، و fputc همدم بود عملکرد fgetc خواندن. و بنابراین، به عنوان شما ممکن است تصور کنید، آن را معادل نوشتن است. این اجازه می دهد تا ما را به ارسال نامه شخصیت به یک فایل. باز هم، نکته بودن، فقط مانند آن را با fgetc خواندن بود، فایل که ما در حال نوشتن باید خورد شده به برای نوشتن و یا برای اضافه افتتاح شد. اگر ما سعی و استفاده از fputc بر روی یک فایل که ما برای خواندن باز کرده ام، ما در حال رفتن به رنج می برند یک بیت از یک اشتباه است. اما پاسخ خیلی ساده است. سرمایه fputc ptr2 همه که رفتن به آن را انجام دهید این است رفتن به ارسال نامه به A را به فایل 2 نقطه متن، که به نام بود فایل است که ما را باز کرد و اختصاص داده اشاره گر به ptr2. بنابراین ما در حال رفتن به ارسال سرمایه به فایل 2 نقطه متن. و ما یک علامت تعجب ارسال اشاره به فایل 3 نقطه متن، که توسط ptr3 به آن اشاره شد. پس دوباره، بسیار ساده است. اما در حال حاضر ما می توانیم یک چیز دیگر است. ما این مثال ما فقط رفتن شد در مورد این که قادر به تکثیر گربه فرمان لینوکس، که چاپ به روی صفحه نمایش. خوب، اکنون که ما باید توانایی به خواندن حروف از فایل های و نوشتن حروف به فایل ها، چرا ما فقط جای که پاسخ به printf با یک تماس به fputc. و در حال حاضر ما CP کپی کردید، یک دستور بسیار لینوکس که ما در مورد صحبت راه طولانی پیش در دستورات لینوکس ویدیو. ما باید به طور موثر تکرار که در اینجا ببینید. ما در حال خواندن یک کاراکتر و پس از آن ما نوشتن که شخصیت را به فایل دیگر. خواندن از یک فایل، نوشتن به دیگری، و بیش از بیش دوباره و دوباره تا زمانی که ما EOF رسید. ما به پایان کردم فایل ما در حال تلاش برای کپی کردن از. و در آن همه ما نوشته شده است از شخصیت ما را به فایل نیاز که ما در حال نوشتن به. بنابراین این CP، فرمان لینوکس کپی است. در همان ابتدا از این فیلم، من تا به حال نکته که ما یک بحث کمی در مورد اشاره گر. در اینجا به طور خاص است که در آن ما رفتن به مورد اشاره گر صحبت علاوه بر فایل اشاره گر. بنابراین این تابع نظر می رسد نوع ترسناک است. آن را به چندین پارامتر. در بسیاری در اینجا وجود دارد. در بسیاری از مختلف وجود دارد رنگ ها و متون. اما در واقع، آن را فقط نسخه عمومی از fgetc خواندن که به ما اجازه دریافت هر گونه مقدار اطلاعات. این می تواند یک کمی ناکارآمد اگر ما گرفتن شخصیت در یک زمان، تکرار از طریق فایل یکی از شخصیت ها در یک زمان. آیا آن را بهتر نمی شود به 100 در یک زمان و یا 500 در یک زمان؟ خب، از fread و عملکرد آن همدم fwrite، که ما صحبت در مورد در یک ثانیه، به ما اجازه انجام درست آن. ما می توانیم مقدار دلخواه به عنوان خوانده شده اطلاعات از یک فایل و ما آن را ذخیره جایی به طور موقت. به جای این که فقط قادر به جا آن را در یک متغییر منفرد، ما ممکن است نیاز به ذخیره آن در یک آرایه. و بنابراین، ما در چهار تصویب استدلال به fread-- یک اشاره گر به محل که در آن ما رفتن به ذخیره اطلاعات، چقدر بزرگ هر واحد از اطلاعات خواهد بود، که چگونه بسیاری از واحد اطلاعات ما می خواهیم برای به دست آوردن، و از که فایل ما می خواهیم به آنها را دریافت کنید. احتمالا بهترین نشان داده شده با یک مثال است. بنابراین اجازه دهید بگویم که ما اعلام می کنیم آرایه ای از اعداد صحیح 10. ما فقط بر روی اعلام کرده ام پشته خودسرانه اعضای هیات ARR 10. به طوری که خیلی سر راست است. در حال حاضر آنچه که ما انجام است که هر چند frecall این است که ما اندازه از نوع int خواندن بار 10 بایت از اطلاعات است. اندازه بودن INT four-- که به اندازه یک عدد صحیح در C. بنابراین آنچه که ما در حال انجام است ما در حال خواندن 40 بایت از اطلاعات ارزش از فایل به PTR اشاره کرد. و ما در حال ذخیره سازی آن 40 بایت جایی که در آن ما را کنار بگذارند 40 بایت ارزش از حافظه است. خوشبختانه، ما در حال حاضر انجام که توسط اعلام ARR، که آرایه سمت راست وجود دارد. که قادر به برگزاری است 10 واحد چهار بایت. بنابراین در کل، آن را می توانید نگه 40 بایت ارزش از اطلاعات است. و ما در حال حاضر خواندن 40 بایت از اطلاعات را از فایل، و ما آن را ذخیره سازی در ARR. به یاد بیاورید از ویدئو در اشاره گر است که نام یک آرایه، مانند ARR، واقعا فقط یک اشاره گر به اولین عنصر آن است. تا زمانی که ما در ARR عبور وجود دارد، ما هستند، در واقع، عبور در یک اشاره گر. به طور مشابه ما می توانیم انجام this-- ما لزوما نیاز به صرفه جویی بافر ما در پشته. ما همچنین می تواند به صورت پویا تخصیص یک بافر مثل این، با استفاده از malloc. به یاد داشته باشید، زمانی که ما به صورت پویا تخصیص حافظه، ما در حال صرفه جویی در آن را بر روی پشته، نه پشته. اما هنوز هم یک بافر. آن را هنوز هم، در این مورد، برگزاری 640 بایت اطلاعات به دلیل دو برابر طول می کشد تا هشت بایت است. و ما در حال برای 80 از آنها درخواست. ما می خواهیم به فضای برای نگه داشتن 80 دو برابر است. بنابراین 80 بار 8 اطلاعات 640 بایت است. و پاسخ به از fread است جمع آوری 640 بایت اطلاعات از فایل های با اشاره به ptr به و ذخیره سازی آن در حال حاضر در arr2. در حال حاضر ما می توانید از fread درمان نیز درست مثل یک تماس به fgetc خواندن. در این مورد، ما فقط سعی به یکی از شخصیت از فایل. و ما یک نیاز آرایه به برگزاری یک شخصیت. ما فقط می توانید آن را در یک متغیر شخصیت. گرفتن، هر چند، این است که زمانی که ما فقط یک متغیر داشته باشد، ما نیاز به تصویب در آدرس آن متغیر چون یاد بیاورید که اولین آرگومان از fread یک اشاره گر به محل و حافظه است که در آن ما می خواهید برای ذخیره اطلاعات است. باز هم، نام یک آرایه یک اشاره گر است. بنابراین ما نیاز به انجام آرایه علامت. اما C، شخصیت ج در اینجا، یک آرایه است. این فقط یک متغیر است. و بنابراین ما نیاز به تصویب علامت C نشان می دهد که آدرس که در آن ما می خواهیم برای ذخیره این یک بایت از اطلاعات، این یکی از شخصیت ها که ما در حال جمع آوری از PTR. Fwrite-- من را از طریق رفتن این کمی بیشتر quickly-- است که تقریبا معادل دقیق از fread به جز آن را برای نوشتن به جای خواندن، فقط مانند other-- ما باز داشته ام و نزدیک، یک شخصیت، ارسال یک شخصیت. در حال حاضر آن را دریافت دلخواه مقدار اطلاعات، مقدار دلخواه راست از اطلاعات است. بنابراین درست مثل قبل، ما می توانیم یک آرایه از اعداد صحیح 10 که در آن ما در حال حاضر اطلاعات ذخیره شده، شاید. احتمالا خط کد بود که باید بین این دو به که در آن من را پر کنید ARR با چیزی معنی دار. من آن را با 10 عدد صحیح مختلف پر کنید. و به جای آن، آنچه من انجام شده است از ورود نوشتن و جمع آوری اطلاعات از ورود. و من در نظر گرفتن که اطلاعات و قرار دادن آن را در فایل. بنابراین به جای آن از فایل به بافر، ما در حال حاضر از رفتن بافر به فایل. پس از آن فقط به عقب است. پس دوباره، درست مثل قبل، ما می توانیم همچنین یک تکه پشته از حافظه دارند که ما به صورت پویا ام اختصاص داده و خواندن از و ارسال که به فایل. و ما نیز یک متغیر واحد قادر به برگزاری یک بایت از اطلاعات، مانند یک شخصیت. اما باز هم، ما نیاز به تصویب در آدرس آن متغیر وقتی ما می خواهیم از آن را بخوانید. بنابراین ما می توانیم اطلاعات را ارسال ما در آن آدرس را پیدا به اشاره گر فایل، PTR. بسیاری از دیگر وجود دارد فایل های بزرگ I / O توابع که علاوه بر انجام کارهای مختلف آنهایی را که ما در مورد امروز صحبت کردیم. زن و شوهر از آنهایی که شما ممکن است مفید fgets و fputs هستند، که معادل از fgetc خواندن و fputc اما برای خواندن یک رشته منفرد از یک فایل. به جای یک شخصیت واحد، آن را به کل یک رشته به عنوان خوانده شده. fprintf، که اساسا اجازه می دهد تا شما به استفاده از printf به ارسال به فایل. بنابراین درست مثل شما می توانید انجام تغییر متغیر با استفاده از متغیرهایی درصد i و درصد د، و غیره، با printf شما می توانید به طور مشابه را رشته printf و چاپ چیزی که به یک فایل. fseek-- اگر شما یک پخش دی وی دی قیاس من معمولا استفاده از here-- است نوعی مانند با استفاده از خود را عقب و سریع به جلو دکمه ها را به سراسر فیلم حرکت می کند. به طور مشابه، شما می توانید در اطراف فایل حرکت می کند. یکی از چیزهایی که در داخل که ساختار فایل که C را برای شما به عنوان یک شاخص است که در آن شما را در فایل می باشد. آیا شما در بسیار آغاز، در بایت صفر؟ آیا شما در بایت 100، بایت 1،000، و غیره؟ شما می توانید با استفاده از fseek به حرکت خودسرانه که نشانگر جلو یا عقب. و ftell، دوباره شبیه به یک دستگاه پخش DVD، است مانند یک ساعت کمی است که می گوید چگونه دقیقه و ثانیه به شما بسیاری از شما به یک فیلم خاص است. به طور مشابه، ftell شما می گوید که چگونه بسیاری از بایت شما را به فایل می باشد. feof نسخه های مختلف است تشخیص این که آیا شما در پایان از فایل است. و ferror یک تابع است که شما می توانید استفاده کنید برای تشخیص اینکه آیا چیزی است رفته کار با یک فایل. باز هم، این است که فقط خاراندن سطح. هنوز هم مقدار زیادی بیشتر فایل وجود دارد I / O توابع در io.h. استاندارد اما این احتمالا شما شروع به کار با اشاره گر فایل. من داگ لوید هستم. این CS50 است.