[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.