1 00:00:07,060 --> 00:00:08,420 [Powered by Google Translate] تامی: در این فیلم، خواهیم یاد 2 00:00:08,420 --> 00:00:10,140 هدایت و لوله. 3 00:00:10,140 --> 00:00:12,780 تا کنون، ما شده ایم با استفاده از توابع مانند printf به 4 00:00:12,780 --> 00:00:15,590 داده های خروجی به ترمینال و توابع مانند GetString 5 00:00:15,590 --> 00:00:17,520 اجازه می دهد تا کاربر را به ارائه ورودی به ما 6 00:00:17,520 --> 00:00:19,490 برنامه با استفاده از صفحه کلید. 7 00:00:19,490 --> 00:00:21,880 اجازه دهید به سرعت نگاهی به برنامه ای است که می شود یک خط را 8 00:00:21,880 --> 00:00:25,960 ورودی از کاربر و پس از آن خروجی. 9 00:00:25,960 --> 00:00:28,990 >> در خط 7 ما باعث کاربر برای یک رشته، و 10 00:00:28,990 --> 00:00:31,680 سپس در خط 8، ما آن را چاپ پشت. 11 00:00:31,680 --> 00:00:35,220 کامپایل و اجرای برنامه های ما است. 12 00:00:35,220 --> 00:00:35,900 بزرگ است. 13 00:00:35,900 --> 00:00:37,620 رشته ما به بازگشت تکرار شد 14 00:00:37,620 --> 00:00:39,170 به ما در ترمینال. 15 00:00:39,170 --> 00:00:42,110 این اتفاق از آنجا که تابع printf نوشت 16 00:00:42,110 --> 00:00:46,220 جریان استاندارد کردن، و یا S-T-D-خارج. 17 00:00:46,220 --> 00:00:49,230 هنگامی که چیزی به STDOUT نوشته شده است، آن را به طور پیش فرض 18 00:00:49,230 --> 00:00:51,110 نمایش داده شده توسط ترمینال. 19 00:00:51,110 --> 00:00:53,720 >> به طوری که همه به خوبی و خوب است، اما آنچه که اگر، به جای به سادگی 20 00:00:53,720 --> 00:00:57,700 نمایش رشته، ما می خواستیم به آن را ذخیره کنید به یک فایل؟ 21 00:00:57,700 --> 00:01:00,470 برای مثال، ما ممکن است بخواهید به خاطر داشته باشید این دقیقا همان چیزی است که ما 22 00:01:00,470 --> 00:01:04,450 برنامه هنگامی که ما به آن یک ورودی خاص به بعد. 23 00:01:04,450 --> 00:01:07,270 یکی از روش خواهد بود برای انجام این کار در برنامه C، با استفاده از 24 00:01:07,270 --> 00:01:09,680 برخی از توابع خاص برای نوشتن فایل های که خواهیم 25 00:01:09,680 --> 00:01:11,270 در یکی دیگر از فیلم را ببینید. 26 00:01:11,270 --> 00:01:13,260 حتی ساده تر، هر چند، به نحوی 27 00:01:13,260 --> 00:01:16,090 تغییر مسیر STDOUT را در یک فایل. 28 00:01:16,090 --> 00:01:19,780 به این ترتیب، هنگامی که printf به STDOUT می نویسد، مطالب 29 00:01:19,780 --> 00:01:21,720 را در یک فایل به جای نوشته شده است 30 00:01:21,720 --> 00:01:23,410 نمایش داده شده توسط ترمینال. 31 00:01:23,410 --> 00:01:26,690 ما می توانیم که فقط با اضافه کردن یک علامت بزرگتر انجام دهید، به دنبال 32 00:01:26,690 --> 00:01:30,820 توسط نام فایل، به فرمان استفاده می کنیم برای اجرای برنامه های ما است. 33 00:01:30,820 --> 00:01:34,730 >> بنابراین، به جای به سادگی اجرا / تغییر مسیر، ما می توانیم 34 00:01:34,730 --> 00:01:38,880 اجرا / تغییر مسیر، به دنبال بیشتر از ورود به سیستم، به دنبال 35 00:01:38,880 --> 00:01:41,530 نام فایل مانند file.txt. 36 00:01:41,530 --> 00:01:44,290 بیایید ببینید که چه اتفاقی می افتد. 37 00:01:44,290 --> 00:01:45,130 OK. 38 00:01:45,130 --> 00:01:48,470 توجه کنید که این زمان، هیچ چیز در ترمینال نمایش داده می شد، 39 00:01:48,470 --> 00:01:50,290 اما در حال حاضر ما از تغییر نیست 40 00:01:50,290 --> 00:01:52,040 برنامه C در همه. 41 00:01:52,040 --> 00:01:56,090 اکنون بیایید بررسی محتویات این شاخه را با LS. 42 00:01:56,090 --> 00:01:56,630 >> بسیار خوب. 43 00:01:56,630 --> 00:02:00,840 ما در حال حاضر یک فایل جدید در دایرکتوری ما به نام file.txt، 44 00:02:00,840 --> 00:02:03,640 که نام فایل را به ما عرضه می شود زمانی که ما زد ما 45 00:02:03,640 --> 00:02:05,050 تغییر مسیر برنامه است. 46 00:02:05,050 --> 00:02:08,020 اجازه دهید باز کردن file.txt. 47 00:02:08,020 --> 00:02:11,840 و در اینجا، ما می توانید ببینید که STDOUT از هدایت بود 48 00:02:11,840 --> 00:02:15,550 نوشته شده به فایل با نام file.txt. 49 00:02:15,550 --> 00:02:18,470 بنابراین اجرای دستور قبلی رو دوباره اجازه می دهد، اما تهیه 50 00:02:18,470 --> 00:02:20,075 ورودی های مختلف این زمان. 51 00:02:25,140 --> 00:02:25,900 باشه. 52 00:02:25,900 --> 00:02:28,205 بیایید نگاهی به file.txt در حال حاضر. 53 00:02:31,070 --> 00:02:34,580 >> ما در اینجا می توانید ببینید که این فایل رونویسی شده است، بنابراین ما 54 00:02:34,580 --> 00:02:37,120 ورودی اصلی دیگر وجود ندارد. 55 00:02:37,120 --> 00:02:40,280 اگر ما به جای می خواهید برای الحاق به این فایل، قرار دادن جدید 56 00:02:40,280 --> 00:02:43,600 ورودی در زیر محتویات موجود در فایل، ما می توانیم 57 00:02:43,600 --> 00:02:46,800 استفاده از دو بیشتر از نشانه های به جای فقط یک است. 58 00:02:46,800 --> 00:02:48,050 بیایید سعی کنید که. 59 00:02:52,160 --> 00:02:57,910 در حال حاضر، اگر ما برای باز کردن file.txt دوباره، ما می توانیم هر دو از ما 60 00:02:57,910 --> 00:02:59,580 خطوط ورودی می باشد. 61 00:02:59,580 --> 00:03:02,180 در برخی موارد، ممکن است بخواهید به دور انداختن هر 62 00:03:02,180 --> 00:03:03,850 خروجی برنامه ما. 63 00:03:03,850 --> 00:03:06,450 به جای نوشتن خروجی را در یک فایل و سپس حذف 64 00:03:06,450 --> 00:03:09,310 فایل زمانی که ما با آن انجام می شود، ما می توانیم به ویژه نوشتن 65 00:03:09,310 --> 00:03:12,360 فایل با نام / dev / null را. 66 00:03:12,360 --> 00:03:15,160 هنگامی که چیزی به / نوشته شده dev/null-- 67 00:03:15,160 --> 00:03:16,960 یا فقط برای devnull کوتاه - 68 00:03:16,960 --> 00:03:18,950 آن را به طور خودکار حذف خواهد شد. 69 00:03:18,950 --> 00:03:23,290 پس از devnull به عنوان یک سیاه چاله برای داده های شما فکر می کنم. 70 00:03:23,290 --> 00:03:26,070 >> بنابراین در حال حاضر ما را دیده ام چگونه می تواند تغییر مسیر ورود به سیستم بزرگتر از 71 00:03:26,070 --> 00:03:29,610 STDOUT، بیایید ببینید که چگونه ما می توانیم تغییر مسیر استاندارد در - 72 00:03:29,610 --> 00:03:31,250 یا S-T-D-در - 73 00:03:31,250 --> 00:03:33,550 آنالوگ STDOUT. 74 00:03:33,550 --> 00:03:36,010 در حالی که توابع مانند printf به جریان نامیده می شود ارسال 75 00:03:36,010 --> 00:03:40,500 STDOUT، GetString و توابع مشابه خواندن از جریان 76 00:03:40,500 --> 00:03:43,770 نام STDIN، که، به طور پیش فرض، جریان است 77 00:03:43,770 --> 00:03:46,290 شخصیت های تایپ شده در صفحه کلید. 78 00:03:46,290 --> 00:03:50,010 ما می توانیم STDIN با استفاده از علامت کوچکتر از هدایت، به دنبال 79 00:03:50,010 --> 00:03:51,370 نام فایل. 80 00:03:51,370 --> 00:03:54,000 در حال حاضر، به جای باعث کاربر برای ورودی در 81 00:03:54,000 --> 00:03:57,870 ترمینال، یک برنامه فایل مشخص شده را باز کنید و با استفاده از 82 00:03:57,870 --> 00:03:59,790 خط خود را به عنوان ورودی است. 83 00:03:59,790 --> 00:04:02,620 >> بیایید ببینید که چه اتفاقی می افتد. 84 00:04:02,620 --> 00:04:03,280 بزرگ است. 85 00:04:03,280 --> 00:04:07,590 خط اول از file.txt شده است به ترمینال چاپ 86 00:04:07,590 --> 00:04:10,160 زیرا ما خواستار GetString یک بار. 87 00:04:10,160 --> 00:04:13,170 اگر ما تا به حال یکی دیگر از تماس به GetString در برنامه ما، 88 00:04:13,170 --> 00:04:16,149 خط بعدی از file.txt می شده اند به عنوان استفاده می شود 89 00:04:16,149 --> 00:04:17,990 ورودی که به تماس. 90 00:04:17,990 --> 00:04:21,050 باز هم، ما برنامه C ما تغییر نمی کند در تمام. 91 00:04:21,050 --> 00:04:23,620 ما فقط در حال تغییر است که چگونه ما آن را اجرا کنید. 92 00:04:23,620 --> 00:04:27,080 و همچنین، به یاد داشته باشید ما را هدایت نمی STDOUT این زمان، 93 00:04:27,080 --> 00:04:28,970 به طوری که خروجی این برنامه هنوز 94 00:04:28,970 --> 00:04:31,040 در ترمینال نمایش داده شده است. 95 00:04:31,040 --> 00:04:33,500 ما می توانیم، البته، تغییر مسیر هر دو STDIN 96 00:04:33,500 --> 00:04:37,320 و STDOUT مثل این. 97 00:04:37,320 --> 00:04:43,550 در حال حاضر، file2.txt شامل خط اول file.txt. 98 00:04:43,550 --> 00:04:46,140 >> بنابراین، با استفاده از این عملگرها، ما شده ایم قادر به خواندن و 99 00:04:46,140 --> 00:04:48,130 نوشتن از فایل های متنی. 100 00:04:48,130 --> 00:04:51,890 در حال حاضر، بیایید ببینید که چگونه ما می تواند خروجی یک برنامه را به عنوان استفاده از 101 00:04:51,890 --> 00:04:54,710 ورودی به یک برنامه دیگر. 102 00:04:54,710 --> 00:04:56,650 بنابراین در اینجا یکی دیگر از برنامه ساده C 103 00:04:56,650 --> 00:05:00,190 در اینجا به نام hello.c. 104 00:05:00,190 --> 00:05:02,617 همانطور که می بینید، این به سادگی خروجی "سلام 105 00:05:02,617 --> 00:05:04,430 ! "به کاربر وجود دارد. 106 00:05:04,430 --> 00:05:08,890 اگر من می خواهم به تغییر مسیر به عنوان ورودی استفاده از خروجی خوش آمدید - 107 00:05:08,890 --> 00:05:10,190 یکی دیگر از برنامه - 108 00:05:10,190 --> 00:05:13,920 من برای اولین بار می تواند STDOUT خوش آمدید به یک فایل به نام هدایت 109 00:05:13,920 --> 00:05:18,960 input.txt، سپس STDIN از تغییر مسیر به همان هدایت 110 00:05:18,960 --> 00:05:21,190 فایل - input.txt. 111 00:05:21,190 --> 00:05:26,730 بنابراین من می تواند انجام دهد. / خوش آمدید> input.txt. 112 00:05:26,730 --> 00:05:28,810 برای اجرای این مطبوعات را وارد کنید. 113 00:05:28,810 --> 00:05:31,910 به دنبال / تغییر مسیر < 114 00:05:31,910 --> 00:05:35,270 input.txt، و اجرای آن است. 115 00:05:35,270 --> 00:05:38,290 بنابراین ما می توانیم این بیت با یک نقطه و ویرگول، که اجازه می دهد تا کوتاه 116 00:05:38,290 --> 00:05:41,360 ما را به اجرای دو یا چند فرمان را در همان خط است. 117 00:05:41,360 --> 00:05:47,920 پس می توانم بگویم. / خوش آمدید> input.txt، نقطه و ویرگول بدین شکل؛ 118 00:05:47,920 --> 00:05:50,580 / تغییر مسیر input.txt <. 119 00:05:53,850 --> 00:05:56,740 >> بنابراین این کار می کند، اما هنوز هم احساس خیلی زیبا. 120 00:05:56,740 --> 00:05:59,530 منظورم این است که آیا ما واقعا نیاز به این واسطه یک فایل متنی است که 121 00:05:59,530 --> 00:06:02,520 دیگر لازم نیست پس از تغییر مسیر اجرا می شود؟ 122 00:06:02,520 --> 00:06:05,780 خوشبختانه، ما می توانیم این فایل متنی فوق العاده با استفاده از چه چیزی اجتناب 123 00:06:05,780 --> 00:06:07,220 به نام لوله. 124 00:06:07,220 --> 00:06:13,740 اگر من می گویم، / خوش آمدید |. / تغییر مسیر، و سپس STDOUT 125 00:06:13,740 --> 00:06:15,310 این برنامه در سمت چپ - 126 00:06:15,310 --> 00:06:16,740 در این مورد، خوش آمدید - 127 00:06:16,740 --> 00:06:18,970 خواهد شد به عنوان ورودی استاندارد برای استفاده 128 00:06:18,970 --> 00:06:20,370 برنامه در سمت راست است. 129 00:06:20,370 --> 00:06:24,850 در این مورد، تغییر مسیر است. بنابراین اجرای این اجازه. 130 00:06:24,850 --> 00:06:25,930 >> وجود دارد بروید. 131 00:06:25,930 --> 00:06:30,080 ما می توانید ببینید که خروجی از سلام به عنوان ورودی مورد استفاده قرار گرفت 132 00:06:30,080 --> 00:06:31,520 برای تغییر مسیر. 133 00:06:31,520 --> 00:06:34,890 توسط stringing دستورات هم با استفاده از لوله های ما را تشکیل می دهند چه خبر 134 00:06:34,890 --> 00:06:38,120 خط لوله نامیده می شود، از آنجایی که خروجی ما این است که اساسا در حال حرکت 135 00:06:38,120 --> 00:06:40,590 از طریق دنباله ای از دستورات است. 136 00:06:40,590 --> 00:06:43,570 با استفاده از لوله ها، ما می توانیم برخی مواد سرد بدون نیاز به انجام 137 00:06:43,570 --> 00:06:45,870 نوشتن هر کد را در تمام. 138 00:06:45,870 --> 00:06:48,760 به عنوان مثال، اجازه دهید می گویند ما می خواهیم بدانیم که چگونه بسیاری از فایل ها 139 00:06:48,760 --> 00:06:50,630 در داخل این پوشه. 140 00:06:50,630 --> 00:06:55,200 با استفاده از یک لوله، ما می توانیم از دستور ls با WC ترکیب - 141 00:06:55,200 --> 00:06:56,460 یا wordcount - 142 00:06:56,460 --> 00:06:57,850 فرمان. 143 00:06:57,850 --> 00:07:02,230 ls به هر فایل در دایرکتوری به STDOUT خروجی و 144 00:07:02,230 --> 00:07:08,040 WC به ما خواهد گفت که چگونه بسیاری از خطوط از طریق STDIN به آن داده است. 145 00:07:08,040 --> 00:07:12,440 بنابراین، اگر ما می گویند LS | WC-L - 146 00:07:12,440 --> 00:07:16,800 تهیه-L پرچم به WC به آن بگویم برای شمارش خطوط - 147 00:07:16,800 --> 00:07:19,260 ما می توانید ببینید که دقیقا چگونه بسیاری از فایل ها 148 00:07:19,260 --> 00:07:21,940 در دایرکتوری جاری. 149 00:07:21,940 --> 00:07:24,570 >> پس نگاهی به یک مثال به شما اجازه می دهد تا. 150 00:07:24,570 --> 00:07:27,740 من در اینجا یک فایل به نام students.txt 151 00:07:27,740 --> 00:07:29,600 با یک لیست از اسامی. 152 00:07:29,600 --> 00:07:32,730 با این حال، این اسامی در هر منظور از آن همه نیست، و به نظر می رسد 153 00:07:32,730 --> 00:07:34,850 مانند نام چند تکرار شده است. 154 00:07:34,850 --> 00:07:38,510 آنچه ما می خواهیم یک لیست از نام های منحصر به فرد در به ترتیب حروف الفبا می باشد 155 00:07:38,510 --> 00:07:42,550 نظم، ذخیره شده را در یک فایل به نام final.txt. 156 00:07:42,550 --> 00:07:45,210 ما می توانیم، البته، نوشتن یک برنامه C برای انجام این کار برای ما. 157 00:07:45,210 --> 00:07:46,560 اما این رفتن به بی ارزش 158 00:07:46,560 --> 00:07:48,560 پیچیده خیلی سریع است. 159 00:07:48,560 --> 00:07:51,740 بیایید به جای لوله ها و برخی از ساخته شده در ابزار برای حل استفاده کنید 160 00:07:51,740 --> 00:07:53,300 این مشکل است. 161 00:07:53,300 --> 00:07:57,760 >> اولین چیزی که ما باید انجام دهیم این است خواندن فایل students.txt. 162 00:07:57,760 --> 00:08:00,530 دستور cat انجام درست آن. 163 00:08:00,530 --> 00:08:03,230 آن را در فایل مشخص شده به خواندن و نوشتن 164 00:08:03,230 --> 00:08:05,750 مطالب خود را به STDOUT. 165 00:08:05,750 --> 00:08:07,570 پس از خواندن فایل متنی ایم، ما خواهیم 166 00:08:07,570 --> 00:08:09,490 می خواهید به مرتب کردن بر اساس نام. 167 00:08:09,490 --> 00:08:12,510 مرتب کردن بر اساس دستور می تواند این کار را برای ما اداره کند. 168 00:08:12,510 --> 00:08:16,830 مرتب سازی بر اساس خط از طریق STDIN به STDOUT عرضه خروجی 169 00:08:16,830 --> 00:08:19,310 به منظور طبقه بندی شده اند. 170 00:08:19,310 --> 00:08:23,450 به منظور تامین محتویات students.txt به 171 00:08:23,450 --> 00:08:29,600 STDIN مرتب کردن بر اساس، ما می تواند از لوله به ترکیب و گربه مرتب سازی بر اساس استفاده کنید. 172 00:08:29,600 --> 00:08:34,440 مرتب کردن و | پس من می توانم گربه students.txt اجرا 173 00:08:34,440 --> 00:08:35,640 Enter را فشار دهید. 174 00:08:35,640 --> 00:08:39,309 و در حال حاضر، ما دیدن محتویات students.txt در 175 00:08:39,309 --> 00:08:40,909 بر اساس حروف الفبا. 176 00:08:40,909 --> 00:08:42,860 >> بنابراین اضافه کردن یک فرمان دیگر به شما اجازه می دهد - 177 00:08:42,860 --> 00:08:44,730 uniq، و یا منحصر به فرد - 178 00:08:44,730 --> 00:08:46,230 به خط لوله. 179 00:08:46,230 --> 00:08:49,810 همانطور که شما ممکن است حدس بزنید، uniq، زمانی که عرضه یک دنباله مرتب شده 180 00:08:49,810 --> 00:08:53,650 خطوط از طریق STDIN، خطوط منحصر به فرد خروجی. 181 00:08:53,650 --> 00:08:56,910 بنابراین در حال حاضر ما students.txt گربه 182 00:08:56,910 --> 00:09:00,040 | مرتب سازی بر | uniq. 183 00:09:00,040 --> 00:09:03,330 در نهایت، ما می توانیم خروجی از خط لوله به صرفه جویی 184 00:09:03,330 --> 00:09:09,090 فایل از طریق گربه students.txt | مرتب سازی بر | uniq 185 00:09:09,090 --> 00:09:12,440 > final.txt. 186 00:09:12,440 --> 00:09:16,260 بنابراین، اگر ما برای باز کردن final.txt، ما باید دقیقا همان چیزی است که ما 187 00:09:16,260 --> 00:09:17,270 به دنبال: 188 00:09:17,270 --> 00:09:20,180 لیستی از نام های منحصر به فرد به ترتیب حروف الفبا، 189 00:09:20,180 --> 00:09:22,150 ذخیره شده در یک فایل متنی. 190 00:09:22,150 --> 00:09:26,020 به هر حال، ما همچنین می تواند گفته اند که مرتب سازی بر اساس < 191 00:09:26,020 --> 00:09:32,290 students.txt | uniq> final.txt برای انجام دقیقا 192 00:09:32,290 --> 00:09:35,400 همان چیزی که با استفاده از هر یک از اپراتورهای ما در دیده 193 00:09:35,400 --> 00:09:36,580 این فیلم. 194 00:09:36,580 --> 00:09:39,540 >> نام تامی است، و این CS50.