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

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



 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

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



-
Đ
Đ


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++

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

T
T
ó
ó
m
m
t
t


t
t
m
m


t
t
s
s


t
t
ù
ù
y
y
ch
ch

-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


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

Đ


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++ (

Đ
Đ


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

Đ


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++ (



i h
i h


c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Thư
Thư
vi
vi


n
n
l
l


p
p
tr
tr
ì
ì



c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Thư
Thư
vi
vi


n
n
l
l


p
p
tr
tr
ì
ì
nh
nh
trong
trong

c
lo
lo


i
i
thư
thư
vi
vi


n
n
l
l


p
p
tr
tr
ì
ì
nh
nh
 Archives (static library)
 Là tậphợp các file object tạo thành mộtfile đơnnhất
 Tương tự file .LIB trên Windows



c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
C
C
á
á
c
c
lo
lo


i
i
thư
thư
vi
vi


n
n
l
l

Thông tin
Thông tin
-
-
Đ
Đ


i h
i h


c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
C
C
á
á
c
c
lo
lo


i
i

exit(0);
}

Biên dịch không có link thư việntĩ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 đếnthư việntĩ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
2.18
Khoa Công ngh
Khoa Công ngh


Thông tin
Thông tin
-
-
Đ
Đ


i h
i h


c B

p
tr
tr
ì
ì
nh
nh
 Thư việnliênkết động (dynamic, shared library)
 Tương tự thư việndạng .DLL của Windows

Thư mụcchứathư việnchuẩn
 /usr/lib, /lib
 Tạothư việnliênkết động libab.so từ a.c và b.c
1. Biên dịch tạo các file object có dùng tùy chọn-fPIC
$ gcc -c -fPIC a.c b.c
2. Tạothư việnliênkế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 32-bit LSB shared object, Intel 80386, version 1
(SYSV), not stripped
2.19
Khoa Công ngh
Khoa Công ngh


Thông tin
Thông tin
-
-



n
n
l
l


p
p
tr
tr
ì
ì
nh
nh
(
(
t.t
t.t
)
)
 Tạo ứng dụng vớifile myapp.cnhư ví dụ trước
 Biên dịch link vớithư việntĩnh libab.so
$ 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 đếnthư việntĩnh libab.a

C
á
á
c
c
lo
lo


i
i
thư
thư
vi
vi


n
n
l
l


p
p
tr
tr
ì
ì
nh

-
Đ
Đ


i h
i h


c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
C
C
á
á
c
c
lo
lo


i
i
thư
thư
vi

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 Trong thư mụchiệntạicó2 thư viện là libab.a và libab.so. Khi đó,
linker sẽưu tiên liên kếtthư viện.so trước. Muốnchỉđịnh buộc
linker tiếnhànhliên kếttĩnh vớithư 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
2.22
Khoa Công ngh
Khoa Công ngh


Thông tin
Thông tin
-
-
Đ
Đ


i h
i h


c B
c B
á
á


Thông tin
Thông tin
-
-
Đ
Đ


i h
i h


c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Theo
Theo
dõi
dõi
c
c
á
á
c
c
process

ch Khoa Tp. HCM
ch Khoa Tp. HCM
Th
Th


c
c
thi
thi
foreground process
foreground process
 Khi gõ lệnh tương ứng vớitênchươngtrìnhtheocáchthông
thường
 Khi click vào icon trên giao diện đồ hoạ tương ứng vớichương
trình.
 Chương trình chạymặttiềntương tác đượcvớingười dùng
qua thiếtbị nhậpchuẩn (standard input) là bàn phím.
 Kếtxuấtcủachương trình chủ yếulàthiếtbị xuấtchuẩn
(standard output) là màn hình.
 Trình thông dịch lệnh sẽ bị blocked cho tới khi foreground
process kết thúc
2.25
Khoa Công ngh
Khoa Công ngh


Thông tin
Thông tin
-


c
c
thi
thi
foreground process
foreground process
 Dùng tổ hợpphímCtrl-C
Ví dụ:
$find / -name “*.ps” -print^C


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status