1. Trang chủ
  2. » Công Nghệ Thông Tin

chap01 c linux p3 IPC vanlangembeddedsystems

23 108 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 461,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

„ Mục tiêu ‰ Cho phép phối hợp hoạt động giữa các quá trình trong hệ thống ‰ Giải quyết đụng độ trên vùng tranh chấp „ Truyền thông điệp từ quá trình này đến các quá trình khác „ Chia sẻ

Trang 3

„ Mục tiêu

‰ Cho phép phối hợp hoạt động giữa các quá trình trong hệ thống

‰ Giải quyết đụng độ trên vùng tranh chấp

„ Truyền thông điệp từ quá trình này đến các quá trình khác

„ Chia sẻ thông tin giữa các quá trình với nhau

Trang 4

Giao tiếp & đồng bộ thông tin

Trang 5

Tín hiệu

„ Dựa vào các sự kiện bất đồng bộ.

„ Kernel có nhiệm vụ gửi (deliver) sự kiện đến

process

„ Các process có thể tự thiết lập các hành vi ứng xử tương ứng với sự kiện nhận được.

Trang 6

„ Tham khảo thêm

‰ $ man signal hoặc info signal

‰ $ kill -l

‰ $ more /usr/include/bits/signum.h

Trang 7

Hành vi

„ Các hành vi có thể thực hiện khi có sự kiện

„ Thực hiện các hành vi mặc định (do hệ điều hành qui định)

Trang 8

Nguồn tạo-phát sinh tín hiệu

‰ Int kill(pid_t pid, int sig);

„ Từ lời gọi system call alarm()→tạo ra SIGALARM

Trang 9

Lập trình với Signal

#include <signal.h>

typedef void (*sighandler_t)(int);

„ sighandler_t signal(int signum, sighandler_t handler);

„ int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

‰ int sighold(int sig);

‰ int sigrelse(int sig);

‰ int sigignore(int sig);

‰ int sigpause(int sig);

Trang 10

Lập trình với Signal

sighandler_t signal(int signum, sighandler_t handler);

„ Thay đổi hành vi của process đối với signal

„ Tham số của hàm signal()

‰ signum:

„ số hiệu signal muốn thay đổi hành vi(trừ SIGKILL hay

SIGSTOP) - dạng số hay symbolic

‰ handler:

„ hành vi mới đối với signal, các giá trị có thể:

‰ SIG_DFL: thiết lập lại hành vi về mặc định (default)

‰ SIG_IGN: lờ đi (ignore) signal tương ứng

‰ Tham chiếu đến hàm xử lý sự kiện (signal-handler) mới do người

dùng tự định nghĩa

Trang 11

return 0;

}

Lưu ý: SIGINT tạo ra khi user nhấn Ctrl+C đểkết

Trang 12

return 0;

Trang 13

„ Là kênh truyền dữ liệu giữa các process với nhau theo dạng FIFO

Trang 16

„ kết quả thực thi hàm pipe() là 0 ,

„ có hai file descriptor tương ứng sẽ được trả về trong

Trang 18

}

Trang 19

Hàm Dup

#include <unistd.h>

int dup (int filedes);

„ Chức năng:

‰ tạo bản sao của filedes

‰ File descriptor nhỏ nhất còn chưa sử dụng sẽ là bản sao của

filedes

„ Kết quả của hàm dup()

‰ Thành công: tạo bản sao

‰ Lỗi: -1 (mã lỗi trong biến ngoại errno)

„ File descriptor mới có những thuộc tính chung với file ban đầu

‰ Cùng chỉ đến một file (hay pipe) đang mở

‰ Chia sẻ cùng một file pointer

‰ Có cùng một chế độ truy cập (read, write hoặc read/write)

Trang 20

Hàm Dup2

#include <unistd.h>

Int dup2 (int filedes, int filedes2);

„ Tương tự dup(), nhưng dup2() cho phép chỉ

định file descriptor đích

filedes

Trang 21

‰ Có thể dùng với các process có quan hệ bố con

‰ Có thể tạo ra từ dấu nhắc lệnh shell(bằng lệnh

Trang 22

Bài tập

Trang 23

Q/A

Ngày đăng: 19/06/2018, 14:28

TỪ KHÓA LIÊN QUAN