[Powered by Google Translate] تامی: در این فیلم، خواهیم یاد هدایت و لوله. تا کنون، ما شده ایم با استفاده از توابع مانند printf به داده های خروجی به ترمینال و توابع مانند GetString اجازه می دهد تا کاربر را به ارائه ورودی به ما برنامه با استفاده از صفحه کلید. اجازه دهید به سرعت نگاهی به برنامه ای است که می شود یک خط را ورودی از کاربر و پس از آن خروجی. در خط 7 ما باعث کاربر برای یک رشته، و سپس در خط 8، ما آن را چاپ پشت. کامپایل و اجرای برنامه های ما است. بزرگ است. رشته ما به بازگشت تکرار شد به ما در ترمینال. این اتفاق از آنجا که تابع printf نوشت جریان استاندارد کردن، و یا S-T-D-خارج. هنگامی که چیزی به STDOUT نوشته شده است، آن را به طور پیش فرض نمایش داده شده توسط ترمینال. به طوری که همه به خوبی و خوب است، اما آنچه که اگر، به جای به سادگی نمایش رشته، ما می خواستیم به آن را ذخیره کنید به یک فایل؟ برای مثال، ما ممکن است بخواهید به خاطر داشته باشید این دقیقا همان چیزی است که ما برنامه هنگامی که ما به آن یک ورودی خاص به بعد. یکی از روش خواهد بود برای انجام این کار در برنامه C، با استفاده از برخی از توابع خاص برای نوشتن فایل های که خواهیم در یکی دیگر از فیلم را ببینید. حتی ساده تر، هر چند، به نحوی تغییر مسیر STDOUT را در یک فایل. به این ترتیب، هنگامی که printf به STDOUT می نویسد، مطالب را در یک فایل به جای نوشته شده است نمایش داده شده توسط ترمینال. ما می توانیم که فقط با اضافه کردن یک علامت بزرگتر انجام دهید، به دنبال توسط نام فایل، به فرمان استفاده می کنیم برای اجرای برنامه های ما است. بنابراین، به جای به سادگی اجرا / تغییر مسیر، ما می توانیم اجرا / تغییر مسیر، به دنبال بیشتر از ورود به سیستم، به دنبال نام فایل مانند file.txt. بیایید ببینید که چه اتفاقی می افتد. OK. توجه کنید که این زمان، هیچ چیز در ترمینال نمایش داده می شد، اما در حال حاضر ما از تغییر نیست برنامه C در همه. اکنون بیایید بررسی محتویات این شاخه را با LS. بسیار خوب. ما در حال حاضر یک فایل جدید در دایرکتوری ما به نام file.txt، که نام فایل را به ما عرضه می شود زمانی که ما زد ما تغییر مسیر برنامه است. اجازه دهید باز کردن file.txt. و در اینجا، ما می توانید ببینید که STDOUT از هدایت بود نوشته شده به فایل با نام file.txt. بنابراین اجرای دستور قبلی رو دوباره اجازه می دهد، اما تهیه ورودی های مختلف این زمان. باشه. بیایید نگاهی به file.txt در حال حاضر. ما در اینجا می توانید ببینید که این فایل رونویسی شده است، بنابراین ما ورودی اصلی دیگر وجود ندارد. اگر ما به جای می خواهید برای الحاق به این فایل، قرار دادن جدید ورودی در زیر محتویات موجود در فایل، ما می توانیم استفاده از دو بیشتر از نشانه های به جای فقط یک است. بیایید سعی کنید که. در حال حاضر، اگر ما برای باز کردن file.txt دوباره، ما می توانیم هر دو از ما خطوط ورودی می باشد. در برخی موارد، ممکن است بخواهید به دور انداختن هر خروجی برنامه ما. به جای نوشتن خروجی را در یک فایل و سپس حذف فایل زمانی که ما با آن انجام می شود، ما می توانیم به ویژه نوشتن فایل با نام / dev / null را. هنگامی که چیزی به / نوشته شده dev/null-- یا فقط برای devnull کوتاه - آن را به طور خودکار حذف خواهد شد. پس از devnull به عنوان یک سیاه چاله برای داده های شما فکر می کنم. بنابراین در حال حاضر ما را دیده ام چگونه می تواند تغییر مسیر ورود به سیستم بزرگتر از STDOUT، بیایید ببینید که چگونه ما می توانیم تغییر مسیر استاندارد در - یا S-T-D-در - آنالوگ STDOUT. در حالی که توابع مانند printf به جریان نامیده می شود ارسال STDOUT، GetString و توابع مشابه خواندن از جریان نام STDIN، که، به طور پیش فرض، جریان است شخصیت های تایپ شده در صفحه کلید. ما می توانیم STDIN با استفاده از علامت کوچکتر از هدایت، به دنبال نام فایل. در حال حاضر، به جای باعث کاربر برای ورودی در ترمینال، یک برنامه فایل مشخص شده را باز کنید و با استفاده از خط خود را به عنوان ورودی است. بیایید ببینید که چه اتفاقی می افتد. بزرگ است. خط اول از file.txt شده است به ترمینال چاپ زیرا ما خواستار GetString یک بار. اگر ما تا به حال یکی دیگر از تماس به GetString در برنامه ما، خط بعدی از file.txt می شده اند به عنوان استفاده می شود ورودی که به تماس. باز هم، ما برنامه C ما تغییر نمی کند در تمام. ما فقط در حال تغییر است که چگونه ما آن را اجرا کنید. و همچنین، به یاد داشته باشید ما را هدایت نمی STDOUT این زمان، به طوری که خروجی این برنامه هنوز در ترمینال نمایش داده شده است. ما می توانیم، البته، تغییر مسیر هر دو STDIN و STDOUT مثل این. در حال حاضر، file2.txt شامل خط اول file.txt. بنابراین، با استفاده از این عملگرها، ما شده ایم قادر به خواندن و نوشتن از فایل های متنی. در حال حاضر، بیایید ببینید که چگونه ما می تواند خروجی یک برنامه را به عنوان استفاده از ورودی به یک برنامه دیگر. بنابراین در اینجا یکی دیگر از برنامه ساده C در اینجا به نام hello.c. همانطور که می بینید، این به سادگی خروجی "سلام ! "به کاربر وجود دارد. اگر من می خواهم به تغییر مسیر به عنوان ورودی استفاده از خروجی خوش آمدید - یکی دیگر از برنامه - من برای اولین بار می تواند STDOUT خوش آمدید به یک فایل به نام هدایت input.txt، سپس STDIN از تغییر مسیر به همان هدایت فایل - input.txt. بنابراین من می تواند انجام دهد. / خوش آمدید> input.txt. برای اجرای این مطبوعات را وارد کنید. به دنبال / تغییر مسیر < input.txt، و اجرای آن است. بنابراین ما می توانیم این بیت با یک نقطه و ویرگول، که اجازه می دهد تا کوتاه ما را به اجرای دو یا چند فرمان را در همان خط است. پس می توانم بگویم. / خوش آمدید> input.txt، نقطه و ویرگول بدین شکل؛ / تغییر مسیر input.txt <. بنابراین این کار می کند، اما هنوز هم احساس خیلی زیبا. منظورم این است که آیا ما واقعا نیاز به این واسطه یک فایل متنی است که دیگر لازم نیست پس از تغییر مسیر اجرا می شود؟ خوشبختانه، ما می توانیم این فایل متنی فوق العاده با استفاده از چه چیزی اجتناب به نام لوله. اگر من می گویم، / خوش آمدید |. / تغییر مسیر، و سپس STDOUT این برنامه در سمت چپ - در این مورد، خوش آمدید - خواهد شد به عنوان ورودی استاندارد برای استفاده برنامه در سمت راست است. در این مورد، تغییر مسیر است. بنابراین اجرای این اجازه. وجود دارد بروید. ما می توانید ببینید که خروجی از سلام به عنوان ورودی مورد استفاده قرار گرفت برای تغییر مسیر. توسط stringing دستورات هم با استفاده از لوله های ما را تشکیل می دهند چه خبر خط لوله نامیده می شود، از آنجایی که خروجی ما این است که اساسا در حال حرکت از طریق دنباله ای از دستورات است. با استفاده از لوله ها، ما می توانیم برخی مواد سرد بدون نیاز به انجام نوشتن هر کد را در تمام. به عنوان مثال، اجازه دهید می گویند ما می خواهیم بدانیم که چگونه بسیاری از فایل ها در داخل این پوشه. با استفاده از یک لوله، ما می توانیم از دستور ls با WC ترکیب - یا wordcount - فرمان. ls به هر فایل در دایرکتوری به STDOUT خروجی و WC به ما خواهد گفت که چگونه بسیاری از خطوط از طریق STDIN به آن داده است. بنابراین، اگر ما می گویند LS | WC-L - تهیه-L پرچم به WC به آن بگویم برای شمارش خطوط - ما می توانید ببینید که دقیقا چگونه بسیاری از فایل ها در دایرکتوری جاری. پس نگاهی به یک مثال به شما اجازه می دهد تا. من در اینجا یک فایل به نام students.txt با یک لیست از اسامی. با این حال، این اسامی در هر منظور از آن همه نیست، و به نظر می رسد مانند نام چند تکرار شده است. آنچه ما می خواهیم یک لیست از نام های منحصر به فرد در به ترتیب حروف الفبا می باشد نظم، ذخیره شده را در یک فایل به نام final.txt. ما می توانیم، البته، نوشتن یک برنامه C برای انجام این کار برای ما. اما این رفتن به بی ارزش پیچیده خیلی سریع است. بیایید به جای لوله ها و برخی از ساخته شده در ابزار برای حل استفاده کنید این مشکل است. اولین چیزی که ما باید انجام دهیم این است خواندن فایل students.txt. دستور cat انجام درست آن. آن را در فایل مشخص شده به خواندن و نوشتن مطالب خود را به STDOUT. پس از خواندن فایل متنی ایم، ما خواهیم می خواهید به مرتب کردن بر اساس نام. مرتب کردن بر اساس دستور می تواند این کار را برای ما اداره کند. مرتب سازی بر اساس خط از طریق STDIN به STDOUT عرضه خروجی به منظور طبقه بندی شده اند. به منظور تامین محتویات students.txt به STDIN مرتب کردن بر اساس، ما می تواند از لوله به ترکیب و گربه مرتب سازی بر اساس استفاده کنید. مرتب کردن و | پس من می توانم گربه students.txt اجرا Enter را فشار دهید. و در حال حاضر، ما دیدن محتویات students.txt در بر اساس حروف الفبا. بنابراین اضافه کردن یک فرمان دیگر به شما اجازه می دهد - uniq، و یا منحصر به فرد - به خط لوله. همانطور که شما ممکن است حدس بزنید، uniq، زمانی که عرضه یک دنباله مرتب شده خطوط از طریق STDIN، خطوط منحصر به فرد خروجی. بنابراین در حال حاضر ما students.txt گربه | مرتب سازی بر | uniq. در نهایت، ما می توانیم خروجی از خط لوله به صرفه جویی فایل از طریق گربه students.txt | مرتب سازی بر | uniq > final.txt. بنابراین، اگر ما برای باز کردن final.txt، ما باید دقیقا همان چیزی است که ما به دنبال: لیستی از نام های منحصر به فرد به ترتیب حروف الفبا، ذخیره شده در یک فایل متنی. به هر حال، ما همچنین می تواند گفته اند که مرتب سازی بر اساس < students.txt | uniq> final.txt برای انجام دقیقا همان چیزی که با استفاده از هر یک از اپراتورهای ما در دیده این فیلم. نام تامی است، و این CS50.