Paip adalah media untuk komunikasi antara proses. Satu proses menulis data ke paip, dan proses lain membaca data dari paip. Dalam artikel ini, kita akan melihat bagaimana fungsi paip () digunakan untuk menerapkan konsep menggunakan bahasa C.
Mengenai Paip
Di dalam paip, data disimpan dalam urutan FIFO, yang bermaksud menulis data ke satu hujung paip secara berurutan dan membaca data dari hujung paip yang lain dalam urutan yang sama.
Sekiranya ada proses yang dibaca dari paip, tetapi belum ada proses lain yang belum ditulis ke paip, maka baca kembali fail akhir. Sekiranya proses ingin menulis ke paip, tetapi tidak ada proses lain yang dilekatkan pada paip untuk membaca, maka ini adalah keadaan ralat, dan paip menghasilkan isyarat SIGPIPE.
Fail Tajuk
#sertakanSintaks
paip int (int files [2])Hujah
Fungsi ini mengambil satu argumen, susunan dua bilangan bulat (difailkan). difailkan [0] digunakan untuk membaca dari paip, dan difailkan [1] digunakan untuk menulis ke paip. Proses yang ingin dibaca dari paip harus ditutup difailkan [1], dan proses yang hendak ditulis ke paip harus ditutup difailkan [0]. Sekiranya hujung paip yang tidak diperlukan tidak ditutup dengan jelas, maka fail akhir (EOF) tidak akan dikembalikan.
Nilai pulangan
Pada kejayaan, yang paip () mengembalikan 0, kerana kegagalan fungsi kembali -1.
Secara bergambar, kita boleh mewakili paip () berfungsi seperti berikut:
Berikut adalah beberapa contoh yang menggambarkan cara menggunakan fungsi paip dalam bahasa C.
Contoh1
Dalam contoh ini, kita akan melihat bagaimana fungsi paip berfungsi. Walaupun menggunakan paip dalam satu proses tidak begitu berguna, tetapi kita akan mendapat idea.
// Contoh1.c#sertakan
#sertakan
#sertakan
#sertakan
int utama ()
int n;
int files [2];
penampan char [1025];
char * message = "Helo, Dunia!";
paip (difailkan);
tulis (difailkan [1], mesej, strlen (mesej));
jika ((n = baca (filees [0], penyangga, 1024))> = 0)
penampan [n] = 0; // tamatkan rentetan
printf ("baca% d bait dari paip:"% s "\ n", n, penyangga);
yang lain
kesalahan ("baca");
jalan keluar (0);
Di sini kita pertama kali membuat paip menggunakan paip () berfungsi kemudian ditulis ke paip menggunakan fildes [1] akhir. Kemudian, data telah dibaca menggunakan hujung paip yang lain, iaitu difailkan [0]. Untuk membaca dan menulis ke fail, kami biasa baca () dan tulis () fungsi.
Contoh2
Dalam contoh ini, kita akan melihat bagaimana proses ibu bapa dan anak berkomunikasi menggunakan paip.
// Contoh2.c#sertakan
#sertakan
#sertakan
#sertakan
#sertakan
int utama ()
int files [2], nbytes;
pid_t childpid;
rentetan [] = "Hello, world!\ n ";
char readbuffer [80];
paip (difailkan);
jika ((childpid = garpu ()) == -1)
kesalahan ("garpu");
jalan keluar (1);
jika (childpid == 0)
close (files [0]); // Proses kanak-kanak tidak memerlukan hujung paip ini
/ * Kirim "string" melalui bahagian output paip * /
tulis (difailkan [1], tali, (strlen (string) +1));
jalan keluar (0);
yang lain
/ * Proses ibu bapa menutup bahagian output paip * /
tutup (filees [1]); // Proses ibu bapa tidak memerlukan hujung paip ini
/ * Baca dalam rentetan dari paip * /
nbytes = read (files [0], readbuffer, sizeof (readbuffer));
printf ("Rentetan baca:% s", readbuffer);
pulangan (0);
Pertama, satu paip telah dibuat menggunakan fungsi paip kemudian proses kanak-kanak telah dibentuk. Kemudian, proses anak menutup akhir membaca dan menulis ke paip. Proses induk menutup akhir menulis dan membaca dari paip dan memaparkannya. Di sini aliran data hanya satu cara iaitu dari anak ke ibu bapa.
Kesimpulan:
paip () adalah panggilan sistem yang kuat di Linux. Dalam artikel ini, kita hanya melihat aliran data sehala, satu proses menulis, dan proses yang lain berbunyi, membuat dua saluran kita dapat mencapai aliran data dua arah juga.