Pengaturcaraan C

Cara menggunakan fungsi paip dalam bahasa C

Cara menggunakan fungsi paip dalam bahasa C

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

#sertakan

Sintaks

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.

Cara membalikkan arah tatal Tetikus dan Pad Sentuh pada Windows 10
Tetikus dan Pad sentuhs bukan sahaja menjadikan pengkomputeran mudah, tetapi lebih cekap dan kurang memakan masa. Kami tidak dapat membayangkan kehidu...
Cara menukar saiz, warna & skema penunjuk dan kursor tetikus pada Windows 10
Penunjuk dan kursor tetikus di Windows 10 adalah aspek yang sangat penting dalam sistem operasi. Ini boleh dikatakan untuk sistem operasi lain juga, j...
Enjin Permainan Sumber Percuma dan Terbuka untuk Membangunkan Permainan Linux
Artikel ini akan merangkumi senarai enjin permainan sumber percuma dan terbuka yang dapat digunakan untuk mengembangkan permainan 2D dan 3D di Linux. ...