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

9
3

if (argc != 3)

|

printf(' cần 2 đối số đối với chương trình sao file!');

exit(1)

|

fdold = open (argv[1], O_RDONLY);

/* mở file nguồn chỉ đọc */

if (fdold == -1)

|

printf (' Không thể mở file &cs\n',argv[1]);

exit(1);

|

fdnew =creat (argv[2],0666); /*mở File đich rw cho mọi người */

if (fdnew ==-1)

|

printf('Không thể khởi tạo file &cs\n',argv[2];

exit(1);

|

copy(fdold,fdnew);

exit(0);

|
copy (old, new)

int old, new;

|

int count;

while (count = read(old,buffer,sizeof(buffer))>0)

write(buffer,count);

|


Trong chương trình trên, mã lệnh (gọi là phần text) của file được sinh ra từ các hàm

main và copy. Khởi tạo giá trị ban đầu cho biến version và dành vùng nhớ cho biến mảng
buffer.

Trong ví dụ trên, các tham số argc, argv và các biến fdold, fdnew trong chương trình

main trong stack khi main được gọi (một lần đối với mọi chương trình), còn các tham số
old và new và biến count trong hàm copy xuất hiện mỗi khi copy được gọi.

Stack người dùng

Stack nhân

Biến cục bộ

không có

Địa chỉ frame 2

Địa chỉ quay lại sau khi

write

Hướng tăng ca stack

Các tham số
của write

bộ đếm

buffer

mới



frame 3


Frame 3

Các biến cục
bộ

count call write ()

call

func2()

Biến cục bộ

Địa chỉ của Frame 1

Địa chỉ của Frame 1