GIÁO TRÌNH HỆ ĐIỀU HÀNH UNIX - LINUX - Trang 156

1
5

assert (fd >= 0);

printf (“ changing file mode\n”);
rc = fchmod ( fd, 0600);
assert (rc == 0);
if ( getuid ( ) == 0 ) {

printf ( “ changing file owner \n ” );

rc = fchown (fd, 99, 99);

assert (rc == 0);

} else
{

printf ( “ not changing file owner\n”);

}

fstat (fd, &statbuf);
printf (“ file mode = 0% ( octal ) \ n”, statbuf.st_mode);
printf(“Owner uid = %d \ n”, statbuf.st_uid);
printf(“ Owner gid = %d \n”, statbuf.st_uid);

close(fd);

}

7.3.4. Thư vin liên kết

Phần này sẽ giới thiệu cách tạo ra và sử dụng thư viện (các module chương trình đã

được viết và được tái sử dụng nhiều lần). Thư viện gốc của C/C++ trên Linux chính là
glibc,

thư viện này cung cấp cho người dùng rất nhiều lời gọi hệ thống.

Các thư viện trên

Linux thường được tổ chức dưới dạng tĩnh (static library), thư viện chia sẻ (shared
library) và động (dynamic library - giống như DLL trên MS Windows). Thư viện
tĩnh được liên kết cố định vào trong chương trình trong quá trình liên kết. Thư viện
dùng chung được nạp vào bộ nhớ trong khi chương trình bắt đầu thực hiện và cho
phép các ứng dụng cùng chia sẻ loại thư viện này. Thư viện liên kết động được nạp
vào bộ nhớ chỉ khi nào chương trình gọi tới.

7.3.4.1 Thư vin liên kết tĩnh

Thư viện tĩnh và các thư viện dùng chung (shared library) là các file chứa các

file được gọi là các module đã được biên dịch và có thể sử dụng lại được. Chúng
được lưu trữ dưới một định dạng đặc biệt cùng với một bảng (hoặc một bản đồ)
phục vụ cho quá trình liên kết và biên dịch. Các thư viện liên kết tĩnh có phần mở
rộng là .a. Để sử dụng các module trong thư viện ta cần thêm phần #include file tiêu
đề (header) vào trong chương trình nguồn và khi liên kết (sau quá trình biên dịch)
thì liên kết với thư viện đó. Dưới đây là một ví dụ về cách tạo và sử dụng một thư
viên liên kết tĩnh. Có 2 phần trong ví dụ này, phần thứ nhất là mã nguồn cho thư
viện và phần thứ 2 cho chương trình sử dụng thư viện.