Thực hành UNIX/Linux - phần 2 pot

74 323 0
Thực hành UNIX/Linux - phần 2 pot

Đ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 Th ự ự c c h h à à nh nh UNIX/Linux UNIX/Linux - - ph ph ầ ầ n n 2 2 - - 2.2 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM N N ộ ộ i i dung dung  Biên dịch và thựcthichương trình C/C++  Giớithiệuvề process  Tổ chứccủamột process  Background và foreground process  Các lệnh thao tác với process  Lập trình process với fork(), exec…() 2.3 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM Qu Qu á á tr tr ì ì nh nh t t ạ ạ o o process process .c, .cpp, .cc gas/gcc/g++ .o gcc/g++ 2.4 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM B B ộ ộ công công c c ụ ụ ph ph á á t t tri tri ể ể n n ứ ứ ng ng d d ụ ụ ng ng GNU GNU  GNU Compiler Collection (GCC)  Thư việncáchàmtiện ích: libc, libstdc++, …  Các trình biên dịch gcc, g++, gcj, gas, …  Trình khử lỗigdb  Trình tiện ích khác trong binutils như nm, strip, ar, objdump, ranlib (dùng lệnh info binutils để xem thêm)  Tiệních: gmake  … 2.5 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM Tr Tr ì ì nh nh biên biên d d ị ị ch ch GNU C/C++ GNU C/C++  Công cụ dùng biên dịch các chương trình C/C++  Quá trình biên dịch thành file thựcthigồm 4 giai đoạntheothứ tự như sau: 1. preprocessing (tiềnxử lý) 2. compilation (biên dịch) 3. assembly (hợpdịch) 4. linking (liên kết)  Ba bước 1, 2, 3 chủ yếulàmviệcvớimộtfile đầuvào  Bước4 cóthể liên kết nhiều object module liên quan để tạo thành file thực thi nhị phân (executable binary)  Lậptrìnhviêncóthể can thiệpvàotừng bước ở trên ☺ 2.6 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM GNU C/C++ compiler ( GNU C/C++ compiler ( gcc/g gcc/g ++) ++) .c,.cc .c,.cc source codes .cpp gcc -E hello.c -o hello.cpp e.g. hello.c hello.cpp hello.o preprocessed source files object code gcc -x assembler -c hello.s [-o hello.o] b.o a.o .s gcc -x cpp-output -S hello.cpp [-o hello.s] assembly source code a.out/hello gcc -S hello.c [-o hello.s] gcc a.o b.o hello.o [-o hello] gcc -c hello.c [-o hello.o] gcc hello.c [-o hello] executable binary 2.7 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM T T ó ó m m t t ắ ắ t t m m ộ ộ t t s s ố ố t t ù ù y y ch ch ọ ọ n n c c ủ ủ a a gcc gcc Tùy chọn Công dụng -o FILE Chỉđịnh tên của file output (khi biên dịch thành file thựcthi, nếu không có -o filename thì tên file mặc định sẽ là a.out) -c Chỉ biên dịch mà không linking (i.e. chỉ tạo ra object file *.o) -I DIRNAME Chỉ tên thư mục DIRNAME là nơichứa các file header (.h) mà gcc sẽ tìm trong đó(mặc định gcc sẽ tự tìm ở các thư mụcchuẩn/usr/include, …) -L DIRNAME Chỉ tên thư mục DIRNAME là nơichứacácthư viện (.a, .so) mà gcc sẽ tìm trong đó(mặc định gcc sẽ tự tìm ở các thư mụcchuẩn/usr/lib, …) -O [n] Tối ưumãthựcthitạo ra (e.g. -O2, -O3, hoặc-O) -g Chèn thêm mã phụcvụ công việcdebug -E Chỉ thựchiệnbướctiềnxử lý (preprocessing) mà không biên dịch -S Chỉ dịch sang mã hợpngữ chứ không linking (i.e. chỉ tạo ra file *.s) -lfoo Link với file thư việncótênlàlibfoo (e.g. -lm, -lpthread) -ansi Biên dịch theo chuẩn ANSI C/C++ (sẽ cảnh báo nếu code không chuẩn) 2.8 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM Biên Biên d d ị ị ch ch chương chương tr tr ì ì nh nh C/C++ C/C++ File main.c #include <stdio.h> #include "reciprocal.h" int main (int argc, char **argv) { int i; i = atoi (argv[1]); printf ("The reciprocal of %d is %g\n", i, reciprocal (i)); return 0; } 2.9 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM Biên Biên d d ị ị ch ch chương chương tr tr ì ì nh nh C/C++ ( C/C++ ( t.t t.t ) ) File reciprocal.h extern double reciprocal (int i); File reciprocal.c #include <assert.h> /* some debug routines here */ #include "reciprocal.h" double reciprocal (int i) { assert (i != 0); /* used for debugging */ return 1.0/i; } 2.10 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c B c B á á ch Khoa Tp. HCM ch Khoa Tp. HCM Biên Biên d d ị ị ch ch chương chương tr tr ì ì nh nh C/C++ ( C/C++ ( t.t t.t ) )  Biên dịch (không link) mộtfile chương trình nguồnC đơnlẻ gcc -c main.c  Kếtquả là object file tên main.o  Biên dịch (không link) file chương trình nguồnC++ g++ -c myprog.cpp  Kếtquả là file object tên là myprog.o  Biên dịch (không link) main.c có sử dụng các file *.h trong thư mục include/ (dùng tùy chọn-I để chỉđịnh đường dẫn) gcc -c -I /include reciprocal.c  Biên dịch (không link) có tối ưumã gcc -c -O2 main.c  Biên dịch có kèm thông tin phụcvụ debug => kích thướcfile output lớn gcc -g reciprocal.c [...]... - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 24 Kết thúc thực thi foreground process Dùng tổ hợp phím Ctrl-C Ví dụ: $find / -name “*.ps” -print ^C Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 25 Tạm hoãn thực thi foreground process Dùng tổ hợp phím: Ctrl-Z Process tương ứng chuyển sang trạng thái suspended Ví dụ $ find / “*.profile” -print ^Z [1]+ Stopped find / ".profile" -print... các file object có dùng tùy chọn -fPIC $ gcc -c -fPIC a.c b.c 2 Tạo thư viện liên kết động tên là libab.so $ gcc -shared -fPIC -o libab.so a.o b.o 3 Có thể dùng lệnh file để xem file libab.so là loại file gì $ file libab.so libab.so: ELF 3 2- bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 18 Các loại thư viện lập trình... Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 29 Quản lý background process Liệt kê các job đang hoạt động - dùng lệnh jobs $jobs -l [1] + 3584 Running xterm -g 90x55 [2] - 3587 Running xterm -g 90x55 Đối với các quá trình, có thể: Có thể chuyển process từ thực thi background sang foreground và ngược lại dùng lệnh fg hoặc bg Kết thúc một quá trình (~ một job) Khoa Công nghệ Thông tin - Đại học... /usr/local/lib/somelib gcc -o myapp main.o -L/usr/local/lib/somelib -lutility - Liên kết với thư viện libtest.so ở thư mục làm việc hiện hành gcc -o myapp main.o -L -ltest Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 11 Biên dịch chương trình C/C++ (t.t) Lưu ý khi biên dịch trong Linux Dùng g++ nếu chương trình có chứa mã C lẫn C++ Dùng gcc nếu chương trình chỉ có mã C File thực thi tạo ra không... /lib/ld-linux.so .2 => /lib/ld-linux.so .2 (0x40000000) Trong thư mục hiện tại có 2 thư viện là libab.a và libab.so Khi đó, linker sẽ ưu tiên liên kết thư viện so trước Muốn chỉ định buộc linker tiến hành liên kết tĩnh với thư viện libab.a thì thêm tùy chọn -static $ mv libab.so libab.so.old $ gcc -static -o myapp myapp.c -L -lab $ /myapp Ke^'t qua? du`ng ha`m func1 7 Khoa Công nghệ Thông tin - Đại học Bách Khoa... tĩnh libab.a $ gcc myapp.c /tmp/cc2dMic1.o: In function `main': /tmp/cc2dMic1.o(.text+0x7): undefined reference to `func1' collect2: ld returned 1 exit status Biên dịch có link đến thư viện tĩnh libab.a $ gcc -o myapp myapp.c -L -lab hoặc gcc -o myapp myapp.c libab.a $ /myapp Ke^'t qua? du`ng ha`m func1: 7 Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 17 Các loại thư viện lập trình... -print $ps PID TTY TIME CMD 27 50 pts/1 00:00:00 bash 28 81 pts/1 00:00:00 find 28 83 pts/1 00:00:00 ps Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 26 Tạm hoãn thực thi foreground process (t.t) Sau khi bị tạm hoãn thực thi bằng ^Z, chúng ta có thể dùng lệnh ps để xem Một lệnh tiện ích khác hiển thị thông tin này là jobs Nếu muốn cho process tiếp tục thực thi foreground, dùng lệnh... nghệ Đạ họ Bá 2. 21 Cơ bản về PROCESS Process: chương trình đang thực thi User có thể theo dõi trạng thái của process, tương tác với process Có hai loại user process chủ yếu trong hệ thống Foreground process Background process Các “process” thực hiện các công việc của hệ điều hành còn gọi là các kernel_thread, daemon Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 22 Theo dõi các... job_number) Ví dụ: $ls -R / > kq & [1] 29 59 $jobs [1]+ Running ls -R / >kq & $ fg 1 Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 32 Kết thúc quá trình Dùng lệnh kill kill [-signal] process_identifier (PID) Cần dùng lệnh ps trước để biết PID của quá trình Có thể dùng lệnh đơn giản như sau: kill process_identifier kill -9 or process_identifier Khoa Công nghệ Thông tin - Đại học Bách Khoa... có g++ -o myapp main.o reciprocal.o gcc -o myapp main.o reciprocal.o Tên file tạo ra là gì ? Cho biết quyền hạn trên file đó ? Thực thi tại dấu nhắc lệnh: $ /myapp 3 Liên kết object files với các thư viện (libraries) khác - Liên kết với thư viện chuẩn POSIX pthread (/usr/lib/libpthread.so) gcc -o myapp main.o -lpthread - Liên kết với thư viện libutility.a ở thư mục /usr/local/lib/somelib gcc -o myapp . Th Th ự ự c c h h à à nh nh UNIX/Linux UNIX/Linux - - ph ph ầ ầ n n 2 2 - - 2. 2 Khoa Công ngh Khoa Công ngh ệ ệ Thông tin Thông tin - - Đ Đ ạ ạ i h i h ọ ọ c. /usr/local/lib/somelib gcc -o myapp main.o -L/usr/local/lib/somelib -lutility -Liênkếtvớithư viện libtest.so ở thư mụclàmviệchiệnhành gcc -o myapp main.o -L . -ltest 2. 12 Khoa

Ngày đăng: 05/03/2014, 20:20

Từ khóa liên quan

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

Tài liệu liên quan