Rumah  >  Artikel  >  Tutorial sistem  >  Linux Named Pipes (FIFO): Cara yang mudah tetapi berkuasa untuk berkomunikasi antara proses

Linux Named Pipes (FIFO): Cara yang mudah tetapi berkuasa untuk berkomunikasi antara proses

WBOY
WBOYke hadapan
2024-02-11 21:36:18785semak imbas

Sistem Linux ialah sistem pengendalian yang menyokong pelaksanaan serentak pelbagai tugas Ia boleh menjalankan berbilang proses pada masa yang sama, dengan itu meningkatkan penggunaan dan kecekapan sistem. Walau bagaimanapun, jika pertukaran data dan kerjasama diperlukan antara proses ini, beberapa kaedah komunikasi antara proses (IPC) perlu digunakan, seperti isyarat, baris gilir mesej, memori kongsi, semaphore, dsb. Antaranya, paip terkenal (FIFO) adalah kaedah IPC yang agak mudah dan berkuasa Ia membolehkan dua atau lebih proses menghantar data melalui fail tanpa mengambil berat tentang kandungan dan format fail. Artikel ini akan memperkenalkan kaedah membaca dan menulis menyekat dan tidak menyekat paip terkenal (FIFO) dalam sistem Linux, termasuk penciptaan, pembukaan, pembacaan, penulisan, penutupan dan pemadaman paip terkenal.

Linux Named Pipes (FIFO): Cara yang mudah tetapi berkuasa untuk berkomunikasi antara proses

//Proses penulisan

#include

#include

#include

#include

#include

#include

#takrifkan FIFO_NAME “/tmp/myfifo”

utama()

{

int fd;

char w_buf[50];

int w_num;

// Kalau fifo dah ada, guna terus, kalau tak buat

jika((mkfifo(FIFO_NAME,0777)

{

printf(“tidak boleh mencipta fifo…n”);

keluar(1);

}

//Buka fifo dalam menyekat mod tulis sahaja

fd=open(FIFO_NAME,O_WRONLY);

w_num=write(fd,”abcdg

printf(“%dn”,w_num);

}

//Proses membaca

#include

#include

#include

#include

#takrifkan FIFO_NAME “/tmp/myfifo”

utama()

{

char r_buf[50];

int fd;

int r_num;

// Kalau fifo dah ada, guna terus, kalau tak buat

jika((mkfifo(FIFO_NAME,0777)

{

printf(“tidak boleh mencipta fifo…n”);

keluar(1);

}

//Buka fifo dalam menyekat mod baca sahaja

fd=open(FIFO_NAME,O_RDONLY);

jika(fd==-1)

{

printf(“buka %s untuk ralat baca”);

keluar(1);

}

// Masukkan rentetan melalui papan kekunci dan tulis ke dalam fifo sehingga "keluar" dimasukkan

r_num=read(fd,r_buf,6);

printf(” %d bait dibaca:%sn”,r_num,r_buf);

nyahpaut(FIFO_NAME);//Padam fifo

}

1. Proses menulis disekat dan proses membaca disekat.

Jalankan proses menulis dahulu (sekat), kemudian jalankan proses membaca, semuanya normal.

Mula-mula jalankan proses membaca (disekat), kemudian jalankan proses menulis, semuanya normal.

2 Proses menulis disekat, dan proses membaca tidak disekat.

Hanya tukar kod kepada fd=open(FIFO_NAME,O_RDONLY | O_NONBLOCK), serupa dengan yang berikut.

Jalankan proses menulis dahulu (sekat), kemudian jalankan proses membaca, semuanya normal.

Jalankan proses membaca terlebih dahulu, dan program ranap secara langsung (Kesalahan segmentasi (teras dibuang) Ia agak wajar apabila anda memikirkannya Anda tidak perlu membaca dan anda tidak mahu menunggu.

3 Proses menulis tidak menyekat, dan proses membaca menyekat.

Jalankan proses penulisan dahulu, panggilan terbuka akan kembali -1, dan buka gagal.

Mula-mula jalankan proses membaca (disekat), kemudian jalankan proses menulis, semuanya normal.

4 Proses penulisan tidak sekat dan proses membaca tidak sekat.

Sebenarnya, ia adalah satu keadaan abnormal di mana separuh daripada 2 dan 3 kategori di atas diambil.

Selain itu, kita boleh melihat melalui arahan ls -la dalam direktori /tmp bahawa saiz fail paip myfifo sentiasa 0. Ini kerana walaupun fail FIFO wujud dalam sistem fail, kandungan dalam FIFO disimpan dalam memori, jadi saiz fail sentiasa 0.

Artikel ini memperkenalkan kaedah membaca dan menulis menyekat dan tidak menyekat paip terkenal (FIFO) dalam sistem Linux, termasuk penciptaan, pembukaan, pembacaan, penulisan, penutupan dan pemadaman paip terkenal. Dengan memahami dan menguasai pengetahuan ini, kami boleh menggunakan paip terkenal (FIFO) dengan lebih baik untuk melaksanakan komunikasi antara proses dan meningkatkan prestasi dan kebolehpercayaan sistem. Sudah tentu, terdapat banyak lagi ciri dan penggunaan paip terkenal (FIFO) dalam sistem Linux, yang memerlukan kami untuk terus belajar dan meneroka. Saya harap artikel ini dapat memberi inspirasi dan bantuan kepada anda.

Atas ialah kandungan terperinci Linux Named Pipes (FIFO): Cara yang mudah tetapi berkuasa untuk berkomunikasi antara proses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam