[Powered by Google Translate] TOMMY: Dalam video ini, kita akan belajar tentang mengarahkan dan pipa. Sejauh ini, kami telah menggunakan fungsi seperti printf untuk output data ke terminal dan fungsi seperti GetString untuk memungkinkan pengguna untuk memberikan masukan kepada kami program menggunakan keyboard. Mari kita cepat kita lihat program yang mendapat garis masukan dari pengguna dan kemudian output itu. On line 7, kami mendorong pengguna untuk string, dan Kemudian pada baris 8, kita mencetaknya kembali. Mari kita mengkompilasi dan menjalankan program kami. Besar. String kami menyediakan itu bergema kembali kepada kami di terminal. Hal ini terjadi karena fungsi printf menulis ke aliran keluar disebut standar, atau s-t-d-out. Ketika sesuatu ditulis ke stdout, itu secara default ditampilkan oleh terminal. Jadi itu semua baik dan bagus, tapi bagaimana jika, bukan hanya menampilkan string, kami ingin menyimpannya ke file? Sebagai contoh, kita mungkin ingin mengingat apa yang kita Program lakukan ketika kami berikan itu masukan tertentu kemudian. Salah satu pendekatan yang akan melakukan hal ini dalam program C kami, dengan menggunakan beberapa khusus fungsi untuk menulis ke file yang kita akan lihat di video yang lain. Bahkan lebih mudah, meskipun, akan entah bagaimana redirect stdout ke file. Dengan begitu, ketika printf menulis ke stdout, isi akan ditulis ke file daripada ditampilkan oleh terminal. Kita bisa melakukan hal itu dengan menambahkan tanda besar-dibandingkan, diikuti oleh nama file, perintah yang kita gunakan untuk menjalankan program kami. Jadi, bukan sekadar melaksanakan / redirect,. Kita bisa jalankan / redirect., diikuti oleh lebih besar dari tanda, diikuti oleh nama file, seperti file.txt. Mari kita lihat apa yang terjadi. OK. Perhatikan bahwa saat ini, tidak ada yang ditampilkan di terminal, tapi kami belum mengubah isi kami C program sama sekali. Mari kita sekarang memeriksa isi dari direktori dengan ls. Baiklah. Kami sekarang memiliki sebuah file baru di direktori kami disebut file.txt, yang merupakan nama file kita diberikan ketika kita berlari kami Redirect program. Mari kita membuka file.txt. Dan di sini, kita dapat melihat bahwa stdout dari redirect adalah ditulis ke file bernama file.txt. Jadi mari kita jalankan perintah sebelumnya lagi, tapi memasok berbeda masukan saat ini. Oke. Mari kita lihat file.txt sekarang. Kita dapat melihat di sini bahwa file tersebut telah ditimpa, sehingga kami masukan asli sudah tidak ada lagi. Jika kita malah ingin menambahkan ke file ini, menempatkan baru masukan bawah isi yang ada file, kita bisa menggunakan dua lebih besar daripada tanda-bukan hanya satu. Mari kita coba. Sekarang, jika kita membuka file.txt lagi, kita dapat melihat kedua kami masukan baris. Dalam beberapa kasus, kita mungkin ingin membuang output dari program kami. Daripada menulis output ke file dan kemudian menghapus file ketika kita sudah selesai dengan itu, kita dapat menulis untuk khusus file bernama / dev / null. Ketika sesuatu yang ditulis ke / dev/null-- atau hanya devnull untuk pendek - maka secara otomatis dibuang. Jadi pikirkan devnull sebagai lubang hitam untuk data Anda. Jadi sekarang kita telah melihat bagaimana tanda lebih besar daripada yang bisa mengarahkan stdout, mari kita lihat bagaimana kita dapat mengarahkan standar - atau s-t-d-in - analog dari stdout. Sementara fungsi seperti printf menulis ke aliran disebut stdout, GetString dan fungsi yang sama membaca dari sungai disebut stdin, yang, secara default, adalah aliran karakter mengetik di keyboard. Kita dapat mengarahkan stdin menggunakan kurang dari tanda, diikuti oleh nama file. Sekarang, daripada mendorong pengguna untuk input pada terminal, program akan membuka file tersebut kita ditentukan dan menggunakan lini sebagai masukan. Mari kita lihat apa yang terjadi. Besar. Baris pertama file.txt telah dicetak ke terminal karena kita memanggil GetString sekali. Jika kita memiliki panggilan lain untuk GetString dalam program kami, baris berikutnya dari file.txt akan telah digunakan sebagai masukan untuk panggilan itu. Sekali lagi, kita belum mengubah program C kita sama sekali. Kita hanya mengubah cara kita menjalankannya. Dan juga ingat, kami belum diarahkan stdout saat ini, sehingga output dari program ini masih ditampilkan di terminal. Kita bisa, tentu saja, baik redirect stdin dan stdout seperti ini. Sekarang, file2.txt berisi baris pertama file.txt. Jadi, menggunakan operator, kami telah mampu membaca dan menulis dari file teks. Sekarang, mari kita lihat bagaimana kita dapat menggunakan output dari satu program sebagai input ke program lain. Jadi, inilah program lain C sederhana I telah di sini disebut hello.c. Seperti yang Anda lihat, ini hanya output "Hi ada "untuk pengguna!. Jika saya ingin redirect untuk digunakan sebagai input output halo - program lain - Saya pertama kali bisa mengarahkan stdout dari halo file bernama input.txt, kemudian mengarahkan stdin dari redirect ke yang sama File - input.txt. Jadi yang bisa saya lakukan. / Hello> input.txt. Tekan Enter untuk mengeksekusi ini. Diikuti oleh. / Redirect < input.txt, dan melaksanakan itu. Jadi kita dapat mempersingkat ini sedikit dengan titik koma, yang memungkinkan kita untuk menjalankan dua atau lebih perintah pada baris yang sama. Jadi bisa saya katakan,. / Hello> input.txt, koma, / Redirect. Input.txt <. Jadi ini bekerja, tapi masih terasa cukup janggal. Maksudku, apakah kita benar-benar membutuhkan file ini perantara teks yang tidak lagi diperlukan setelah redirect berjalan? Untungnya, kita dapat menghindari file teks ekstra menggunakan apa disebut pipa. Jika saya katakan, / hello |.. / Redirect, maka stdout dari program di sebelah kiri - dalam hal ini, halo - akan digunakan sebagai masukan standar untuk Program di sebelah kanan. Dalam kasus ini, redirect. Jadi mari kita menjalankan ini. Di sana kami pergi. Kita bisa melihat bahwa output dari halo digunakan sebagai input untuk redirect. Dengan merangkai perintah bersama-sama menggunakan pipa, kita membentuk apa yang disebut pipa, karena output kami pada dasarnya bergerak melalui urutan perintah. Menggunakan pipa, kita bisa melakukan beberapa hal menarik tanpa perlu menulis kode sama sekali. Sebagai contoh, katakanlah kita ingin tahu berapa banyak file yang dalam direktori ini. Menggunakan pipa, kita dapat menggabungkan perintah ls dengan wc - atau Wordcount - perintah. Ls akan menampilkan setiap file di direktori ke stdout, dan wc akan memberitahu kita berapa banyak baris yang diberikan kepadanya melalui stdin. Jadi, jika kita mengatakan ls | wc-l - memasok l-bendera untuk wc untuk menceritakannya untuk menghitung garis - kita dapat melihat persis berapa banyak file yang di direktori saat ini. Jadi mari kita lihat satu lagi contoh. Saya punya sebuah file yang bernama students.txt, dengan daftar nama. Namun, nama-nama ini tidak dalam urutan itu semua, dan terlihat seperti beberapa nama yang berulang. Apa yang kita inginkan adalah daftar nama-nama yang unik di abjad Agar, disimpan ke sebuah file bernama final.txt. Kita bisa, tentu saja, menulis sebuah program C untuk melakukan hal ini untuk kita. Tapi itu akan mendapatkan tidak perlu kompleks cukup cepat. Mari kita bukannya menggunakan pipa dan beberapa built-in-alat untuk memecahkan masalah ini. Hal pertama yang perlu kita lakukan adalah membaca students.txt file. Perintah cat akan melakukan hal itu. Ini akan membaca dalam file yang ditentukan dan menulis isinya ke stdout. Setelah kita membaca file teks, kita akan ingin mengurutkan nama. Perintah semacam dapat menangani hal ini untuk kita. Urutkan akan menampilkan garis diberikan melalui stdin ke stdout dalam rangka diurutkan. Dalam rangka untuk memasok isi students.txt untuk stdin semacam ini, kita bisa menggunakan pipa untuk menggabungkan kucing dan semacam. Jadi saya bisa mengeksekusi cat students.txt | mengurutkan dan tekan Enter. Dan sekarang, kita melihat isi dari students.txt di urutan abjad. Jadi mari kita tambahkan perintah lain - uniq, atau unik - untuk pipa kami. Seperti yang Anda duga, uniq, bila diaktifkan urutan diurutkan dari garis melalui stdin, akan menampilkan garis yang unik. Jadi sekarang kita punya kucing students.txt | Sort | uniq. Akhirnya, kita dapat menyimpan output dari pipa ke file melalui cat students.txt | sort | uniq > Final.txt. Jadi, jika kita membuka final.txt, kita memiliki apa yang kita mencari: daftar nama yang unik dalam urutan abjad, disimpan ke file teks. By the way, kita juga bisa mengatakan semacam < students.txt | uniq> final.txt untuk melakukan persis hal yang sama, dengan menggunakan masing-masing operator yang kami lihat dalam video ini. Nama saya Tommy, dan ini adalah CS50.