Pemrograman C

Cara menggunakan fungsi pipa dalam bahasa C

Cara menggunakan fungsi pipa dalam bahasa C

Pipa adalah media untuk komunikasi antar proses. Satu proses menulis data ke pipa, dan proses lain membaca data dari pipa. Pada artikel ini, kita akan melihat bagaimana fungsi pipe() digunakan untuk mengimplementasikan konsep menggunakan bahasa C.

Tentang Pipa

Di dalam pipa, data disimpan dalam urutan FIFO, yang berarti menulis data ke salah satu ujung pipa secara berurutan dan membaca data dari ujung pipa yang lain dalam urutan yang sama.

Jika ada proses yang membaca dari pipa, tetapi tidak ada proses lain yang belum menulis ke pipa, maka baca mengembalikan end-of-file. Jika suatu proses ingin menulis ke pipa, tetapi tidak ada proses lain yang terpasang pada pipa untuk membaca, maka ini adalah kondisi kesalahan, dan pipa menghasilkan sinyal SIGPIPE.

File Header

#termasuk

Sintaksis

int pipa (int filedes [2])

Argumen

Fungsi ini mengambil argumen tunggal, array dua bilangan bulat (filedes). file[0] digunakan untuk membaca dari pipa, dan filedes[1] digunakan untuk menulis ke pipa. Proses yang ingin membaca dari pipa harus ditutup filedes[1], dan proses yang ingin menulis ke pipa harus ditutup file[0].  Jika ujung pipa yang tidak perlu tidak ditutup secara eksplisit, maka end-of-file (EOF) tidak akan pernah dikembalikan.

Mengembalikan nilai

Pada kesuksesan, pipa() mengembalikan 0, untuk kegagalan fungsi mengembalikan -1.

Secara piktorial, kita dapat merepresentasikan pipa() fungsi sebagai berikut:

Di bawah ini adalah beberapa contoh yang menggambarkan cara menggunakan fungsi pipa dalam bahasa C.

Contoh 1

Dalam contoh ini, kita akan melihat bagaimana fungsi pipa bekerja. Meskipun menggunakan pipa dalam satu proses tidak terlalu berguna, tetapi kami akan mendapatkan ide.

// Contoh 1.c
#termasuk
#termasuk
#termasuk
#termasuk
int utama()

int n;
int filedes[2];
penyangga karakter[1025];
char *message = "Halo, Dunia!";
pipa (filedes);
tulis(berkas[1], pesan, strlen(pesan));
if ((n = baca ( filedes[0], buffer, 1024 ) ) >= 0)
penyangga[n] = 0; //mengakhiri string
printf("membaca %d byte dari pipa: "%s"\n", n, buffer);

lain
kesalahan("baca");
keluar(0);

Di sini kita pertama kali membuat pipa menggunakan pipa() fungsi kemudian ditulis ke pipa menggunakan file[1] akhir. Kemudian, data telah dibaca menggunakan ujung pipa yang lain, yaitu file[0]. Untuk membaca dan menulis ke file, kami biasa Baca() dan menulis() fungsi.

Contoh2

Dalam contoh ini, kita akan melihat bagaimana proses induk dan anak berkomunikasi menggunakan pipa.

// Contoh2.c
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
int utama()

int filedes[2], nbytes;
pid_t anak;
char string[] = "Halo, dunia!\n";
char readbuffer[80];
pipa (filedes);
if((childpid = garpu()) == -1)

perror("garpu");
keluar(1);

jika (anak kecil == 0)

close(filedes[0]);//Proses anak tidak membutuhkan ujung pipa ini
/* Kirim "string" melalui sisi keluaran pipa */
write(filedes[1], string, (strlen(string)+1));
keluar(0);

lain

/* Proses induk menutup sisi keluaran pipa */
close(filedes[1]);//Proses induk tidak memerlukan ujung pipa ini
/* Membaca string dari pipa */
nbytes = read(filedes[0], readbuffer, sizeof(readbuffer));
printf("Baca string: %s", readbuffer);

kembali (0);

Pertama, satu pipa telah dibuat menggunakan fungsi pipa kemudian proses anak telah bercabang. Kemudian, proses anak menutup ujung baca dan menulis ke pipa. Proses induk menutup ujung tulis dan membaca dari pipa dan menampilkannya. Di sini aliran data hanya satu cara yaitu dari anak ke orang tua.

Kesimpulan:

pipa() adalah panggilan sistem yang kuat di Linux. Dalam artikel ini, kita hanya melihat aliran data satu arah, satu proses menulis, dan proses lainnya membaca, membuat dua pipa, kita juga dapat mencapai aliran data dua arah.

Tombol klik kiri mouse tidak berfungsi pada Windows 10
Jika Anda menggunakan mouse khusus dengan laptop, atau komputer desktop, tetapi but tombol klik kiri mouse tidak berfungsi pada Windows 10/8/7 untuk b...
Kursor melompat atau bergerak secara acak saat mengetik di Windows 10
Jika Anda menemukan bahwa kursor mouse Anda melompat atau bergerak sendiri, secara otomatis, acak saat mengetik di laptop atau komputer Windows, maka ...
Cara membalikkan arah gulir Mouse dan Touchpads di Windows 10
Mouse dan Panel sentuhs tidak hanya membuat komputasi menjadi mudah tetapi juga lebih efisien dan tidak memakan banyak waktu. Kami tidak dapat membaya...