[Powered by Google Translate] TOMMY: Dalam video ini, kita akan belajar tentang mengalihkan dan paip. Setakat ini, kami telah menggunakan fungsi seperti printf output data ke terminal dan fungsi seperti GetString untuk membenarkan pengguna untuk memberi input kepada kami program menggunakan keyboard. Mari cepat mengambil melihat pada program yang mendapat garis input daripada pengguna dan kemudian output. On line 7, kami mendorong pengguna untuk rentetan, dan kemudian on line 8, kita mencetak kembali keluar. Mari menyusun dan menjalankan program kami. Besar. Rentetan yang kita berikan telah bergema kembali kepada kami di terminal. Ini berlaku kerana fungsi printf menulis kepada aliran dipanggil keluar standard, atau s-t-d keluar. Apabila sesuatu yang bertulis kepada stdout, ia adalah secara lalai dipaparkan oleh terminal. Jadi itulah semua baik dan baik, tetapi apa yang jika, bukan sekadar memaparkan rentetan, kita mahu menyimpannya ke fail? Sebagai contoh, kita mungkin mahu ingat dengan tepat apa yang kami program lakukan apabila kita memberikan input tertentu kemudian. Salah satu pendekatan yang akan melakukan ini dalam program C kami, dengan menggunakan beberapa fungsi khas untuk menulis kepada fail bahawa kami akan lihat dalam video lain. Lebih mudah, walaupun, akan entah bagaimana redirect stdout ke fail. Cara itu, apabila printf menulis stdout, kandungannya akan bertulis kepada fail bukannya dipaparkan oleh terminal. Kita boleh berbuat demikian dengan menambah tanda yang lebih besar daripada, diikuti oleh nama fail, arahan kita gunakan untuk melaksanakan program kami. Jadi, bukan sekadar melaksanakan. / Redirect, kita boleh berlari. / redirect, diikuti oleh lebih daripada tanda, diikuti oleh nama fail, seperti file.txt. Mari kita lihat apa yang berlaku. OK. Perhatikan bahawa masa ini, tiada apa yang telah dipaparkan di terminal, tetapi kita telah tidak diubah suai kandungan kami Aturcara C pada semua. Mari kita kini meneliti kandungan direktori ini dengan ls. Semua hak. Kami kini mempunyai fail baru dalam direktori kami dipanggil file.txt, yang merupakan nama fail yang kita dibekalkan apabila kita berlari kita Redirect program. Mari kita membuka file.txt. Dan di sini, kita dapat melihat bahawa stdout daripada redirect ditulis fail dipanggil file.txt. Jadi mari kita jalankan arahan sebelumnya lagi, tetapi membekalkan input berbeza kali ini. Okay. Mari kita melihat file.txt sekarang. Kita boleh lihat di sini bahawa fail telah ditulis ganti, jadi kita input asal tidak ada lagi. Jika kita bukannya mahu untuk melampirkan ke fail ini, meletakkan yang baru input di bawah kandungan sedia ada fail, kita boleh menggunakan dua tanda-tanda yang lebih besar daripada bukan hanya satu. Mari kita cuba. Sekarang, jika kita membuka file.txt lagi, kita boleh melihat kedua-dua kami input baris. Dalam beberapa kes, kita mungkin mahu untuk membuang mana-mana output program kami. Bukannya menulis output ke fail dan kemudian memotong fail apabila kita hendak dilakukan dengan ia, kita boleh menulis kepada khas file dipanggil / dev / null. Apabila apa-apa yang ditulis ke / dev/null-- atau hanya devnull bagi pendek - ia secara automatik dibuang. Jadi berfikir devnull sebagai lubang hitam untuk data anda. Jadi sekarang kita telah melihat bagaimana tanda yang lebih besar daripada boleh mengarahkan stdout, mari kita lihat bagaimana kita boleh redirect standard dalam - atau s-t-d-dalam analog stdout. Walaupun fungsi printf suka menulis kepada aliran yang dipanggil stdout, GetString dan fungsi yang sama yang dibaca dari sungai dipanggil stdin, yang, secara lalai, ialah aliran watak-watak yang ditaip pada keyboard. Kita boleh mengalihkan stdin menggunakan kurang daripada tanda, diikuti mengikut nama fail. Sekarang, bukannya mendorong pengguna untuk input pada terminal, program akan membuka fail kita dinyatakan dan menggunakan garisan itu sebagai input. Mari kita lihat apa yang berlaku. Besar. Barisan pertama file.txt telah dicetak ke terminal kerana kita sedang memanggil GetString sekali. Jika kita mempunyai panggilan lain ke GetString dalam program kami, Barisan seterusnya file.txt akan telah digunakan sebagai input kepada panggilan itu. Sekali lagi, kita tidak diubah suai aturcara C kita pada semua. Kami hanya mengubah bagaimana kita jalankan ia. Dan juga ingat, kita tidak diarahkan stdout masa ini, jadi output program masih dipaparkan di terminal. Kita boleh, sudah tentu, mengarahkan kedua-dua stdin dan stdout seperti ini. Sekarang, file2.txt mengandungi barisan pertama file.txt. Jadi, menggunakan operator, kita telah dapat membaca dan menulis dari fail teks. Sekarang, mari kita lihat bagaimana kita boleh menggunakan output satu program sebagai input untuk program lain. Jadi di sini adalah satu lagi program C mudah saya di sini dipanggil hello.c. Seperti yang anda boleh lihat, ini hanya output "Hi sana! "kepada pengguna. Jika saya mahu redirect untuk digunakan sebagai input output hello - satu lagi program - Saya pertama boleh redirect stdout-hello kepada fail yang dipanggil input.txt, maka mengalihkan stdin redirect yang sama fail - input.txt. Jadi saya boleh lakukan. / Hello> input.txt. Tekan Enter untuk melaksanakan ini. Diikuti oleh. / Mengalihkan < input.txt, dan melaksanakan bahawa. Jadi kita boleh memendekkan sedikit ini dengan semicolon, yang membolehkan kita untuk menjalankan dua atau lebih arahan pada baris yang sama. Jadi yang boleh saya katakan. / Hello> input.txt, koma bernoktah, / Redirect input.txt <. Jadi kerja-kerja ini, tetapi ia masih berasa agak kaku. Maksud saya, adakah kita benar-benar memerlukan fail ini perantara teks yang tidak lagi perlu selepas redirect berjalan? Nasib baik, kita boleh mengelakkan fail teks tambahan ini menggunakan apa yang dipanggil paip. Jika saya katakan, / hello |. / Redirect, maka stdout program di sebelah kiri - dalam kes ini, hello - akan digunakan sebagai input standard untuk program di sebelah kanan. Dalam kes ini, redirect. Jadi mari kita berjalan ini. Terdapat kita pergi. Kita dapat melihat bahawa output hello digunakan sebagai input untuk redirect. Dengan arahan stringing bersama-sama menggunakan paip, kita membentuk apa dipanggil saluran paip, sejak output dasarnya bergerak melalui urutan arahan. Menggunakan paip, yang boleh kita lakukan beberapa barangan sejuk tanpa perlu menulis apa-apa kod pada semua. Sebagai contoh, katakan kita mahu tahu berapa banyak fail di dalam direktori ini. Menggunakan paip, kita boleh menggabungkan arahan ls dengan tandas - atau Wordcount - arahan. Ls akan output setiap fail dalam direktori untuk stdout, dan wc akan memberitahu kita berapa banyak baris diberikan melalui stdin. Jadi, jika kita katakan ls | wc-l - membekalkan l bendera ke tandas untuk memberitahu ia untuk mengira baris - kita boleh melihat dengan tepat berapa banyak fail dalam direktori semasa. Jadi mari kita lihat pada satu lagi contoh. Saya ada di sini fail yang dipanggil students.txt, dengan senarai nama. Walau bagaimanapun, nama-nama ini tidak berada dalam mana-mana perintah yang ia semua, dan ia kelihatan seperti beberapa nama diulangi. Apa yang kita mahu adalah senarai nama-nama yang unik dalam abjad perintah, disimpan untuk fail yang dipanggil final.txt. Kita boleh, sudah tentu, menulis program C untuk melakukan ini untuk kita. Tetapi ia akan mendapat tidak perlu kompleks agak cepat. Mari kita sebaliknya menggunakan paip dan beberapa terbina dalam alat untuk menyelesaikan masalah ini. Perkara pertama yang perlu kita lakukan adalah membaca students.txt fail. Arahan kucing akan berbuat demikian. Ia akan membaca fail yang dinyatakan dan menulis kandungannya ke stdout. Selepas kita telah membaca fail teks, kami akan mahu menyusun nama. Arahan apapun boleh mengendalikan ini untuk kita. Susun akan keluar barisan yang dibekalkan melalui stdin kepada stdout dalam perintah disusun. Dalam usaha untuk membekalkan kandungan students.txt stdin apapun, kita boleh menggunakan paip untuk menggabungkan kucing dan apapun. Jadi saya boleh melaksanakan kucing students.txt | menyusun dan tekan Enter. Dan sekarang, kita lihat kandungan students.txt abjad. Jadi mari kita menambah arahan lain - uniq, atau unik - kepada talian paip kita. Seperti yang anda sangka, uniq, apabila dibekalkan jujukan disusun baris melalui stdin, akan mengeluarkan garis unik. Jadi sekarang kita mempunyai students.txt kucing | Apapun | uniq. Akhirnya, kita dapat menjimatkan output perancangan untuk fail melalui kucing students.txt | apapun | uniq > Final.txt. Jadi, jika kita membuka final.txt, kita mempunyai apa yang kita mencari: senarai nama yang unik dalam susunan abjad, disimpan ke fail teks. By the way, kita juga boleh berkata apapun < students.txt | uniq> final.txt untuk melakukan dengan tepat perkara yang sama, menggunakan setiap pengendali yang kita lihat dalam video ini. Nama saya adalah Tommy, dan ini adalah CS50.