[Powered by Google Translate] TOMMY: В това видео, ние ще научите за
пренасочване на средства и тръби.
Досега сме използвали функции като ФОРМАТ
извеждане на данни към терминала и функции като GetString
да позволи на потребителя да дадат своя принос към нашия
програма с помощта на клавиатурата.
Нека бързо да разгледаме програма, която получава линия на
вход от потребителя и след това да подава.
>> На линия 7, подканване на потребителя за низ, и
след това по линия 8, ние го отпечатване обратно.
Нека компилирате и изпълнявате нашата програма.
Велики.
Низ ние се връщат обратно
ни на терминала.
Това се случи, защото ФОРМАТ функция пише на
поток наречен стандартен, или S-т-г-.
Когато нещо е написано на стандартния изход, това е по подразбиране
показва от терминала.
>> Така че това е много добре, но какво, ако вместо просто
показване на низ, ние искахме да го запишете във файл?
Например, ние може да искам да си спомням какво точно ни
програмата направи, когато го даде дадена суровина, по-късно.
Един подход би бил да се направи това в нашата програма C, като се използва
някои специални функции за писане за файлове, които ние ще
в друг видеоклип.
Даже по-лесно, все пак, би било по някакъв начин да
пренасочване на стандартния изход към файл.
По този начин, когато ФОРМАТ пише на стандартния изход, съдържанието ще
бъдат написани на файла, вместо
показва от терминала.
Ние можем да направим точно това, като се добави по-голяма, отколкото знак, последван
от името на файла, за да командата ние използваме за изпълнение на нашата програма.
>> Така че, вместо просто да изпълнява. / Пренасочващ, можем да
бягай. / пренасочване, последвано от по-голяма от знака, следвани от
име, като file.txt.
Нека видим какво ще стане.
OK.
Забележете, че този път нищо не се показва в рамките на съответния терминал,
но не са променили съдържанието на нашия
С програмата изобщо.
Нека сега разгледаме съдържанието на тази директория с LS.
>> Добре.
Сега имаме нов файл в нашия каталог, наречен file.txt
, което е името на файла, ние доставени, когато ние се завтече
Пренасочване на програмата.
Нека отворим file.txt.
И тук, можем да видим, че стандартния изход от пренасочване
писмено на файл, наречен file.txt.
Така че нека да стартирате отново предишната команда, но доставя
вида на входния сигнал и този път.
Добре.
Нека да погледнем в file.txt сега.
>> Ние можем да видим, че файлът е презаписана, така че нашата
първоначалното въвеждане не е вече там.
Ако вместо това искате да добавите към този файл, поставяйки нов
мощност под съществуващите съдържанието на файла, ние можем да
използвате две по-голяма от знаци, а не само един.
Нека да опитаме.
Сега, ако отворим отново file.txt, можем да видим и на двама ни
входни линии.
В някои случаи, може да искате да изхвърлете
изхода на нашата програма.
Вместо писането на изхода към файл и след това изтриване
файла, когато сме готови с нея, можем да напишем специални
файл, наречен / Dev / нула.
Когато нещо е писано / dev/null--
или просто devnull за кратко
той автоматично се изхвърли.
Така че мисля devnull като черна дупка за вашите данни.
>> Така че сега сме виждали как може да пренасочи по-голяма от знак
стандартния изход, нека да видим как можем да пренасочи стандартния -
или S-т-г-в
аналог на стандартния изход.
Докато функции като ФОРМАТ пишете нарича поток
стандартния изход, GetString и други подобни функции, които се четат от потока
нарича стандартния вход, който, по подразбиране, е поток от
героите да пишат с клавиатурата.
Ние можем да пренасочи стандартния вход с помощта на по-малко от знак, последван
име на файл.
Сега, вместо да накара потребителя за вход на
терминал, програмата ще отвори файла е посочено и използвайте
линиите си за вход.
>> Нека видим какво ще стане.
Велики.
На първия ред на file.txt е отпечатан до терминала
защото ние се обаждате GetString веднъж.
Ако имахме друг разговор, за да GetString в нашата програма,
следващия ред на file.txt би са били използвани като
въвеждане на този призив.
Отново, ние не са модифицирали С програмата ни най-малко.
Ние само се променят, как можем да го стартирате.
И също така не забравяйте, че не сме пренасочва стандартния изход този път,
така че на изхода на програмата все още е
показва на терминала.
Ние можем, разбира се, да пренасочи както стандартния вход
и стандартния изход по този начин.
Сега, file2.txt съдържа първата линия на file.txt.
>> Така че, използването на тези оператори, ние сме били в състояние да четат и
пиша от текстови файлове.
Сега, нека да видим как можем да използваме изхода на една програма
приноса към друга програма.
Така че тук е още една проста програма на С
тук се наричат ​​hello.c.
Както можете да видите, това просто извежда "Здравей
! "на потребителя.
Ако искам пренасочи към използват като вход на изхода на здравей -
друга програма -
Първо да пренасочи стандартния изход на здравей файл, наречен
input.txt, а след това пренасочване на стандартния вход на пренасочи към същата
файл - input.txt.
Така че мога да направя. / Здравей> input.txt.
Натиснете Enter, за да се изпълни това.
Следван от / пренасочващ <
input.txt и изпълнение.
Така че ние можем да скъси това малко с точка и запетая, което позволява
нас да пуснем две или повече команди на една и съща линия.
Затова мога да кажа, / здравей> input.txt, точка и запетая,
/ Пренасочващ <input.txt.
>> Така че това работи, но тя все още се чувства доста грубоват.
Искам да кажа, ние наистина трябва този файл посредник текст, който е
вече не е необходимо след пренасочване на пистата?
За щастие, можем да избегнем това допълнително текстов файл с помощта на това, което е
тръба.
Ако кажа, / Здравейте. / Пренасочване, след това на стандартния изход
програма в ляво -
в този случай, здравей
ще бъде използван като на стандартния вход за
програмата вдясно.
В този случай, да пренасочи. Така че нека да стартирате тази.
>> Точно така.
Ние можем да видим, че е бил използван като вход на изхода на здравей
за пренасочване.
Чрез изброяването на команди заедно с използване на тръби, ние формираме какво е
нарича тръбопровода, тъй като нашата продукция се главно чрез преместването
чрез последователност от команди.
Използването на тръби, можем да направим някои готини неща, без да е необходимо
пише кода на всички.
Например, нека кажем, че искате да знаете колко файлове са
вътре в тази директория.
С помощта на тръба, ние можем да комбинираме ли команда с тоалетна -
или wordcount -
команда.
Ls ще изведе всеки файл в директорията на стандартния изход, и
тоалетна ще ни каже колко линии бяха дадени чрез стандартния вход.
Така че, ако ние казваме ли | WC-л -
предоставяне на-л флаг в тоалетна да го кажа, за да брои линии -
можем да видим точно колко файлове са
в текущата директория.
>> Така че нека да разгледаме още един пример.
Тук имам файл, наречен students.txt,
със списък на имената.
Въпреки това, тези имена не са в произволен ред всичко, и тя изглежда
като няколко имена се повтарят.
Това, което искаме, е списък на уникални имена по азбучен
ред, записва в файл, наречен final.txt.
Ние, разбира се, може да се напише програма на C, за да направи това за нас.
Но това ще стане ненужно
комплекс доста бързо.
Нека вместо това използвайте тръби и някои вградени инструменти за решаване на
този проблем.
>> Първото нещо, което трябва да направите, е прочетете students.txt на файла.
Командата котка ще направи точно това.
Той ще прочетете в посочения файл и пишат
съдържанието му на стандартния изход.
След като сте прочели текстов файл, ние ще
искате да сортирате имената.
Командата вид може да се справя с това за нас.
Сортирай ще изведе линията, извършвани чрез стандартния вход към стандартния изход
подредени за.
С цел да се предоставят на съдържанието на students.txt
стандартния вход вид, бихме могли да използваме тръба да комбинирате котка и сортиране.
Така че може да изпълни котка students.txt | вид и
натиснете Enter.
И сега, виждате съдържанието на students.txt в
азбучен ред.
>> Така че нека добавим друга команда -
Uniq или уникален -
в нашия тръбопровод.
Както можете да предположите, Uniq, когато е предоставила подредени поредица от
линии през стандартния вход ще изведе уникални линии.
Така че сега имаме котка students.txt
| Вид | Uniq.
И накрая, можем да спестим на изхода на тръбопровода за
файл чрез котка students.txt | вид | Uniq
> Final.txt.
Така че, ако се отворим final.txt, ние имаме точно това, което са
търсите за:
списък на уникални имена по азбучен ред,
записва в текстов файл.
Между другото, ние също може да са вид <
students.txt | Uniq> final.txt да се направи точно
едно и също нещо, като се използва всеки от операторите, които сме виждали в
това видео.
>> Моето име е Томи, и това е CS50.