CÁC BÀI THỰC HÀNH LINUX - Trang 31

- 30-

- Các

tiến trình liên lạc qua ống dẫn phải có mối quan hệ họ hàng và các ống dẫn nối

phải được mở trước khi tạo ra các tiến trình con.

- Không

thể tự thay đổi vị trí thông tin trong ống.

8.2.2.

Thao tác với "ống dẫn liên lạc"

Tạo một ống dẫn:

int p_desc[2];

int pipe(p_desc);

Giá trị trả về là 0 nếu thành công, -1 nếu thất bại.

p_desc[0] : chứa các số hiệu mô tả nhờ đó có thể đọc trong ống dẫn.

p_desc[1] : chứa các số hiệu mô tả nhờ đó có thể viết trong ống dẫn.

Như vậy việc viết trong p_desc[1] là để truyền dữ liệu trong ống và việc đọc trong

p_desc[0] để nhận chúng.

Ví dụ:

#include <errno. h>

#include <signal. h>
main()

{
int

i,ret, p_desc[2];

char c;
pipe(p_desc);

write(p_desc[1], "AB", 2);
for (i=1; i<=3,i ++) {

ret=read(p_desc[0], &c, 1);

if (ret == 1)

printf(" Gia tri: %c\n",c);

else

perror("Loi ong dan rong");

}

}

Ví dụ trên chỉ ra rằng ta có thể truyền và nhận thông tin trên ống dẫn. Chúng ta đã

dùng hàm read() và write() để viết (truyền) và đọc (nhận) trên ống dẫn.

8.2.3. Liên

lạc giữa tiến trình cha và tiến trình con

Trong ví dụ dưới đây, một tiến trình tạo ra một ống dẫn, tạo ra một tiến trình

con, viết một văn bản vào ống dẫn.Tiến trình con thừa hưởng ống dẫn và các ký hiệu
mô tả của ống dẫn, thực hiện đọc trong ống dẫn:

#include <errno. h>
#include <stdio. h>


void code_fils(int number) {

int

fd, nread;

char texte[100];

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.