chap01 c linux p3 IPC vanlangembeddedsystems

23 106 0
chap01 c linux p3 IPC vanlangembeddedsystems

Đ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

LẬP TRÌNH HỆ THỐNG NHÚNG CƠ BẢN Chương 01:Lập trình C/C++ Linux (P3: IPC) GV: Email: Nguyễn Ngọc Tú Tu.NN79@gmail.com Nội dung Giới thiệu lập trình nhúng mơi trường Linux (T1) ‰ ‰ ‰ NNTu Tiến trình (T2) Xuất nhập truyền nhận sử dụng IPC (T3-4) Xuất nhập trực tiếp thiết bị qua Port (T5) Hệ Thống Nhúng - Embedded Systems (W 2008) IPC „ Mục tiêu ‰ ‰ „ „ Cho phép phối hợp hoạt động trình hệ thống Giải đụng độ vùng tranh chấp Truyền thông điệp từ trình đến trình khác Chia sẻ thơng tin q trình với NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) Giao tiếp & đồng thông tin „ Communication ‰ Truyền liệu ‰ Chia sẻthông tin ‰ Các chế: „ „ „ „ „ „ „ Synchronization ‰ Giải tranh chấp ‰ Đảm bảo thứ tựxử lý ‰ Các chế: „ „ „ NNTu Signal Pipes Message queues Shared memory Sockets RPC/RMI Lock files Semaphores Mutex (pthread) Hệ Thớng Nhúng - Embedded Systems (W 2008) Tín hiệu „ „ „ Dựa vào kiện bất đồng Kernel có nhiệm vụ gửi (deliver) kiện đến process Các process tự thiết lập hành vi ứng xử tương ứng với kiện nhận NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) Các tín hiệu „ „ „ „ „ „ „ „ NNTu SIGKILL SIGSTOP SIGHUP SIGPIPE SIGINT SIGQUIT … Tham khảo thêm ‰ $ man signal info signal ‰ $ kill -l ‰ $ more /usr/include/bits/signum.h Hệ Thống Nhúng - Embedded Systems (W 2008) Hành vi „ „ Các hành vi thực có kiện Thực hành vi mặc định (do hệ điều hành qui định) ‰ TERMINATED/ABORT „ ‰ CORE (Dump) „ ‰ trì hỗn thực thi IGNORE ‰ „ tạo core image (memory dump) thoát STOP „ „ kết thúc Bỏ qua signal (ngoại trừ SIGKILL, SIGSTOP) CATCH ‰ NNTu Thực hành vi người lập trình định nghĩa (signal handler) Hệ Thống Nhúng - Embedded Systems (W 2008) Nguồn tạo-phát sinh tín hiệu „ Từ kernel ‰ Khi xảy số điều kiện phần cứng „ ‰ Khi xảy điều kiện phần mềm „ „ ‰ Ctrl + C, Ctrl+Z, Ctrl + \ Khi user dùng lệnh „ „ SIGIO Từ người sử dụng ‰ Tổ hợp phím: „ „ SIGSEGV, SIGFPE kill Từ process thực system call kill(): ‰ #include ‰ #include ‰ Int kill(pid_t pid, int sig); Từ lời gọi system call alarm()→tạo SIGALARM NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) Lập trình với Signal #include typedef void (*sighandler_t)(int); „ sighandler_t signal(int signum, sighandler_t handler); „ int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); ‰ ‰ ‰ ‰ NNTu int int int int sighold(int sig); sigrelse(int sig); sigignore(int sig); sigpause(int sig); Hệ Thống Nhúng - Embedded Systems (W 2008) Lập trình với Signal sighandler_t signal(int signum, sighandler_t handler); „ Thay đổi hành vi process signal „ Tham số 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 signal, giá trị có thể: ‰ ‰ ‰ NNTu SIG_DFL: thiết lập lại hành vi mặc định (default) SIG_IGN: lờ (ignore) signal tương ứng Tham chiếu đến hàm xử lý kiện (signal-handler) người dùng tự định nghĩa Hệ Thống Nhúng - Embedded Systems (W 2008) 10 VD4: Bỏ qua signal(sig1.c): #include #include #include #include Int main() { Int i=0; if (signal(SIGINT, SIG_IGN)== SIG_ERR) { perror("\nSIGINT"); exit(3); } while (1); return 0; } Lưu ý: SIGINT tạo user nhấn Ctrl+C đểkết thúc process thực thi NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 11 VD5: Định nghĩa hành vi tín hiệu SIGINT(sig2.c): #include #include #include #include void newhandler(intsig) { printf("\n Signal da nhan: %d",sig); } Int main() { int i=0; if (signal(SIGINT, newhandler) == SIG_ERR) { perror("\nSIGINT"); exit(3); } while (1); return 0; } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 12 PIPE „ Là kênh truyền liệu process với theo dạng FIFO NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 13 PIPE - tác vụ „ Write ‰ ‰ „ #include ssize_t write (int size_t count) filedes, const void *buf, Read ‰ ‰ NNTu #include ssize_t read (int size_t count) filedes, const void *buf, Hệ Thống Nhúng - Embedded Systems (W 2008) 14 PIPE – loại „ Unnamed pipe ‰ ‰ „ Có ý nghĩa cục dành cho process có quan hệ cha với Named pipe (còn gọi FIFO) ‰ ‰ NNTu Có ý nghĩa tồn cục Có thể sử dụng cho process không liên quan cha Hệ Thống Nhúng - Embedded Systems (W 2008) 15 PIPE „ Tạo unnamed pipe: ‰ ‰ „ #include int pipe ( int filedes[2]); Kết ‰ Thành công „ „ ‰ Thất bại „ „ NNTu kết thực thi hàm pipe() 0, có hai file descriptor tương ứng trả filedes[0], filedes[1] hàm pipe() trả -1, mã lỗi biến ngoại errno Hệ Thống Nhúng - Embedded Systems (W 2008) 16 unnamed pipe „ Duplex ‰ Linux: „ unidirectional/half-duplex, filedes[0] dùng để đọc filedes[1] dùng để ghi dữliệu Solaris: „ ‰ „ „ NNTu full-duplex, ghi vào filedes[0], filedes[1] dùng để đọc ngược lại Hệ Thống Nhúng - Embedded Systems (W 2008) 17 VD6: int main() { int fp[2]; char s1[BUFSIZ], s2[BUFSIZ]; pipe(fp); if (fork()==0) { printf("\nInput:"); fgets(s1, BUFSIZ, stdin); s1[strlen(s1)]=0; close(fp[0]); write(fp[1], s1, strlen(s1)+1); } ellse { close(fp[1]); read(fp[0], s2, BUFSIZ); printf("\nFrom pipe > %s\n", s2); } return 0; } NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 18 Hàm Dup „ „ „ #include int dup (int filedes); Chức năng: ‰ tạo filedes ‰ File descriptor nhỏ chưa sử dụng filedes Kết hàm dup() ‰ Thành công: tạo ‰ Lỗi: -1 (mã lỗi biến ngoại errno) File descriptor có thuộc tính chung với file ban đầu ‰ Cùng đến file (hay pipe) mở ‰ Chia sẻ file pointer ‰ Có chế độ truy cập (read, write read/write) NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 19 Hàm Dup2 #include Int dup2 (int filedes, int filedes2); „ Tương tự dup(), dup2() cho phép định file descriptor đích „ Descriptor filedes2 trỏ đến file filedes NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 20 Named Pipe „ „ Tương tự unnamed pipe Một số tính cần ý: ‰ ‰ ‰ NNTu Được ghi nhận file system (directory entry, file permission) Có thể dùng với process có quan hệ bố Có thể tạo từ dấu nhắc lệnh shell(bằng lệnh mknod) Hệ Thống Nhúng - Embedded Systems (W 2008) 21 Bài tập NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 22 Q/A NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 23 ... Giao tiếp & đồng thông tin „ Communication ‰ Truyền liệu ‰ Chia sẻthông tin ‰ C c chế: „ „ „ „ „ „ „ Synchronization ‰ Giải tranh chấp ‰ Đảm bảo thứ tựxử lý ‰ C c chế: „ „ „ NNTu Signal Pipes... #include typedef void (*sighandler_t)(int); „ sighandler_t signal(int signum, sighandler_t handler); „ int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);... nhấn Ctrl +C đểkết th c process th c thi NNTu Hệ Thống Nhúng - Embedded Systems (W 2008) 11 VD5: Định nghĩa hành vi tín hiệu SIGINT(sig2 .c) : #include #include #include

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan