c programming in linux - at7b

46
Nguyễn Thị Thưởng Hoàng Thái Thịnh Nguyễn Thị Thu Nguyễn Văn Thiệu

Upload: thieu-mao

Post on 28-Jun-2015

178 views

Category:

Education


0 download

DESCRIPTION

Nguyễn Thị Thưởng - Nguyễn Thị Thu - Hoàng Thái Thịnh - Nguyễn Văn Thiệu

TRANSCRIPT

Page 1: C Programming in Linux - AT7B

Nguyễn Thị ThưởngHoàng Thái ThịnhNguyễn Thị ThuNguyễn Văn Thiệu

Page 2: C Programming in Linux - AT7B

C Programming In Linux

1. Hello World Program- Thưởng2. Link Library - Thịnh3. Functions, pointers and structures - Thu4. Logic, loops and flow control - Thiệu

Page 3: C Programming in Linux - AT7B

1. Hello World Program

Page 4: C Programming in Linux - AT7B

Gỉa sử nếu bạn sử dùng hệ điều hành Linux với 1 trong hai KDE hoặc Gnome.

Nếu bạn sử dụng KDE bạn sẽ có Konqueror hoặc Dolphin là File Manager và kate hay kedit cho 1 editor.

Nếu bạn dùng Gnome bạn có thể sử dụng Nautilus và gedit.

Thiết lập hệ thống

Page 5: C Programming in Linux - AT7B

Bạn sẽ cần phải cài đặt các gói sau:

Page 6: C Programming in Linux - AT7B

Sử dụng file quản lý Konqueror trong KDE hay Nautilus trong Gnome để tạo ra 1 thư mục mới có tên Programming_in_Linux.

Mở 1 trình soạn thảo trong KDE là kate và trong Gnome là gedit và bắt đầu gõ như sau.

1.1 Chương trình HELLO 1

Page 7: C Programming in Linux - AT7B
Page 8: C Programming in Linux - AT7B

Lưu chương trình là chapter1_1c trong thư mục mà bạn vừa tạo.

Mở 1 terminal window và gõ: gcc-o hello chapter1_1c để biên dịch

Tiếp tục hãy gõ “ ls-l” để liệt kê chi tiết tất cả các file trong thư mục.

Tiếp tục gõ ./hello để chạy chương trình và màn hình sẽ hiện lên dòng chữ:

“Hello,you are learning C !!”.

Page 9: C Programming in Linux - AT7B

Lưu chương trình là chapter1_1c trong thư mục mà bạn vừa tạo.

Mở 1 terminal window và gõ: gcc-o hello chapter1_1c để biên dịch

Tiếp tục hãy gõ “ ls-l” để liệt kê chi tiết tất cả các file trong thư mục.

Tiếp tục gõ ./hello để chạy chương trình và màn hình sẽ hiện lên dòng chữ:

“Hello,you are learning C !!”.

Page 10: C Programming in Linux - AT7B

Ta sẽ lấy ví dụ để bắt đầu chương trình với việc khai báo có chứa các function: int main(int argc,char *argv[]).

Các hàm chức năng được gọi là “main”, trong đó trả về 1 số nguyên, có 2 đối số , 1 số nguyên được gọi là “argc” đó là việc đếm số lượng các đối số lệnh,tiếp đó *argv[] là danh sách hay 1 mảng của một mảngcủa con trỏ,các chuỗi là các đối số được đưa vào khi bạn chạy chương trình từ các dòng lệnh.

1.2 Chương trình Hello 2

Page 11: C Programming in Linux - AT7B

Function:một khối mã chương trình với kiểu dữ liệu trở lại,tên,các dữ liệu cách nhau bằng dấu phẩy,được đặt trong dấu ngoặc đơn, kết thúc mỗi dòng lệnh bằng dấu ;

integer kí hiệu int: là các số đếm như 0,1,2,3…..

List,array kí hiệu []: là 1 chuỗi cùng loại các kí tự theo số thứ tự.

Con trỏ kí hiệu * : địa chỉ 1 vùng nhớ vị trí xuất phát trong một đoạn dữ liệu

String or char *: 1 con trỏ tới 1 chuỗi các kí tự. Một chuỗi các kí tự kết thúc với kí tự đặc biệt NULL hoặc ‘\0’ sẽ mang giá trị 0

* Một vài định nghĩa

Page 12: C Programming in Linux - AT7B

Xét ví dụ sau để thấy rõ ý nghĩa của các function.

Page 13: C Programming in Linux - AT7B

Lưu lại chương trình với tên chapter1_2.c trong thư mục trước đã lưu ở ví dụ 1

Mở 1 cửa sổ terminal và gõ: gcc –o hello2 chapter1_2.c để biên dịch chương trình

Tiếp hãy gõ ls –l để liệt kê chi tiết tất cả các file trong thư mục.

Page 14: C Programming in Linux - AT7B

Tiếp theo bạn hãy gõ ./hello2 và ta có:

Page 15: C Programming in Linux - AT7B

Tiếp đó hãy gõ./hello2 my name is David ta sẽ có:

Page 16: C Programming in Linux - AT7B

Rất thực tế và có thể chạy trong 1 trang web.

Trình biên dịch sử dụng gcc-o hello3 chapter1_3.c copy file hello3 đã được biên dịch tới thư mục public_html/cgi-bin.

Xét ví dụ dưới đây ta có:

1.3 Chương trình HELLO 3

Page 17: C Programming in Linux - AT7B
Page 18: C Programming in Linux - AT7B

Mở 1 trình duyệt web và gõ URL http://localhost/cgi-bin/hello3?david+haskins và bạn sẽ thấy rằng web này có thể được tạo ra bằng 1 chương trình C.

Page 19: C Programming in Linux - AT7B

Trên đây là những ví dụ đơn giản với input rất nhỏ nhưng output lại cho ta thật đáng ngạc nhiên,nó cho ta thấy rất nhiều hoạt động bên trong của máy tính.

Mặc dù chỉ mới bắt đầu nhưng có cũng khá nhiều khái niệm mà ta cần chú ý:

.function .Số(integer) và chuỗi kí tự như các kiểu dữ liệu

.list hay array .Vòng lặp với for và while.

1.4 Tổng kết

Page 20: C Programming in Linux - AT7B

2. Link Library

l 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

l Thư viện được chia làm 2 loạil Thư viện liên kết tĩnhl Thư viện liên kết động

Page 21: C Programming in Linux - AT7B

l Thư viện liên kết tĩnhl Thư viện liên kết tĩnh là các thư viện khi liên kết trình biên

dịch sẽ lấy toàn bộ mã thực thi của các hàm trong thư viện đưa vào chương trình chính.

l Các thư viện liên kết tĩnh có phần mở rộng là .al Để 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 đó

Page 22: C Programming in Linux - AT7B

l Thư viện liên kết tĩnh

• Tạo thư viện liên kết tĩnh (3 bước): Buớc 1. Viết các hàm cho thư viện. Buớc 2. Tạo các file dối tuợng từ các hàm thu viện vừa

viết. Bước 3. Nén các file đối tượng vừa tạo thành một file

thư viện “.a”, tiếp đầu ngữ “lib”.l Ưu điểm:

l Chương trình sử dụng thư viện liên kết tĩnh có thể chạy độc lập với thư viện sau khi được biên dịch

l chạy được trên các máy tính khác nhau

Page 23: C Programming in Linux - AT7B

l Thư viện liên kết tĩnh

l Nhược điểm:

l Tốn không gian ổ đĩal Toàn bộ mã thực thi của các hàm trong thư viện sẽ được nhúng vào file thực thi của

chương trình chínhl Nhiều chương trình khác nhau không thể cùng dùng chung một thư viện duy nhấtl Có những hàm trong thư viện mà chương trình chính không dùng đếncũng được liên

kết với chương trình chính khi biên dịch

l Hạn chế trong việc sửa đổi, nâng cấp thư viện liên kết tĩnh và các chương trình sử dụng thư viện liên kết tĩnh đó :

Page 24: C Programming in Linux - AT7B

l Thư viện liên kết tĩnhl Khi muốn sửa đổi hoặc nâng cấp thư viện thì phải thay đổi hoặc thêm mã nguồn

cho các hàm trong thư viện, dẫn đến việc phải biên dịch lại từ đầu mã nguồn để tạo ra file thư viện “.a”.

l Chương trình sử dụng thư viện liên kết tĩnh nếu muốn tận dụng những tính năng mới của thư viện thì cũng phải được biên dịch lại.

Page 25: C Programming in Linux - AT7B

l Thư viện liên kết động

l Thư viện liên kết động là thư viện mà các hàm trong thư viện không được trực tiếp đưa vào chương trình lúc biên dịch và liên kết

l Trình liên kết chỉ lưu thông tin tham chiếu đến các hàm trong thư viện

l Vào lúc chương trình thực thi, hệ điều hành sẽ nạp các chương trình liên kết cần tham chiếu vào bộ nhớ

l Tạo thư viện liên kết động (3 bước):l Bước 1. Viết các hàm cho thư viện.(tương tự như thư viện liên kết tĩnh)l Bước 2. Tạo các file đối tượng “.o” từ các hàm vừa viết để đưa vào thư viện liên

kết động ( sử dụng gcc với tùy chọn -fpic).l Bước 3. Tạo file thư viện liên kết động (“.so”, tiếp đầu ngữ “lib”) , từ các file đối

tượng vừa tạo, sử dụng gcc với tùy chọn sharedl

Page 26: C Programming in Linux - AT7B

l Thư viện liên kết động

• Ưu điểm

l Tiết kiệm không gian ổ đĩal File thực thi của chương trình chính không chứa mã thực thi của

các hàm trong thư việnl Nhiều chương trình khác nhau có thể cùng dùng chung một thư

viện duy nhất

l Chương trình sử dụng thư viện liên kết động không phải được biên dịch lại mà vẫn có thể sử dụng những tính năng mới của thư viện (trong trường hợp thư viện đó được sửa đổi, nâng cấp)

Page 27: C Programming in Linux - AT7B

l Thư viện liên kết động

l Khuyết điểm

l Chương trình sử dụng thư viện liên kết động không thể chạy độc lập với thư viện

l Chương trình phụ thuộc hoàn toàn vào thư việnl Hạn chế khi muốn sửa đổi hoặc nâng cấp: Khi muốn

sửa đổi hoặc thêm hàm cho thư viện, vẫn phải thực hiện lại các bước như khi tạo thư viện ban đầu(tương tự thư viện liên kết tĩnh)

Page 28: C Programming in Linux - AT7B

l Sử dụng LD_LIBRARY_PATH

Khi ta liên kết 1 chương trình với 1 thư viện động, linker không đặt đường dẫn đầy đủ của thư viện động trong file thực thi, nó chỉ đặt tên của thư viện động. Khi chương trình thực thi, hệ thống tìm các thư viện động và load nó. Hệ thống mặc định chỉ tìm trong thư mục /lib và /usr/lib. Nếu thư viện động không nằm trong những thư mục đó, hệ thống sẽ không thực thi chương trình.

• Một giải pháp cho vấn đề này là sử dụng tùy chọn -Wl và -rpath khi liên kết chương trình.

– Giả sử, khi ta liên kết chương trình bằng câu lệnh :– gcc -o app app.o -L. -ltest

-Wl,-rpath,/usr/local/lib– Thì khi chương trình app thực thi, hệ thống ngoài việc tìm

kiếm thư viện động trong các thư mục chứa thư viện chuẩn, sẽ tìm kiếm thêm cả thư mục /usr/local/lib

Page 29: C Programming in Linux - AT7B

3. Functions, pointers and structures3.1 Chức năng / Hàm (Function) - Trong những chương trình lớn, có thể có những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời gian khi viết chương trình; người ta thường phân chia chương trình thành nhiều module, mỗi module giải quyết một công việc nào đó. Các module như vậy gọi là các chương trình con – Hàm. - Một tiện lợi khác của việc sử dụng chương trình con là ta có thể dễ dàng kiểm tra xác định tính đúng đắn của nó trước khi ráp nối vào chương trình chính và do đó việc xác định sai sót để tiến hành hiệu chỉnh trong chương trình chính sẽ thuận lợi hơn. Hàm trong C có thể trả về kết quả thông qua tên hàm hay có thể không trả về kết quả. - Hàm có hai loại: hàm chuẩn và hàm tự định nghĩa. Ở đây, ta chú trọng đến cách định nghĩa hàm và cách sử dụng các hàm đó. - Một hàm khi được định nghĩa thì có thể sử dụng bất cứ đâu trong chương trình. Trong C, một chương trình bắt đầu thực thi bằng hàm main.

Page 30: C Programming in Linux - AT7B

Ví dụ 1: Tìm số lớn giữa 2 số nguyên a, b như sau:

 

Page 31: C Programming in Linux - AT7B

Hàm thư việnC có chứa một số chức năng được xây dựng để làm một số nhiệm vụ thông thường. Vì vậy, đến nay người ta đã sử dụng atoi, printf, sizeof, strtok, và sqrt.

 

Page 32: C Programming in Linux - AT7B

Hàm thư viện chung của File

Page 33: C Programming in Linux - AT7B
Page 34: C Programming in Linux - AT7B

Kết quả trong một trình duyệt:

Trong trường hợp này các đối số chức năng của ta sẽ được gửi bản sao và không được sửa đổi trong chức năng đã sử dụng.Nếu chúng ta muốn sửa đổi một biến chúng ta sẽ phải gửi con trỏ của nó đến một hàm.

Page 35: C Programming in Linux - AT7B

Truyền tham số cho hàm Mặc nhiên, việc truyền tham số cho hàm trong C là truyền theo giá trị;nghĩa là các giá trị thực (tham số thực) không bị thay đổi giá trị khi truyền cho các tham số hình thức.

Trong chương trình, khi gặp một lời gọi hàm thì hàm bắt đầu thực hiện bằng cách chuyển các lệnh thi hành đến hàm được gọi.

Quá trình diễn ra như sau: - Nếu hàm có tham số, trước tiên các tham số sẽ được gán giá trị thực tương ứng.

Chương trình sẽ thực hiện tiếp các câu lệnh trong thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối cùng.

- Khi gặp lệnh return hoặc dấu } cuối cùng trong thân hàm, chương trình sẽ thoát khỏi hàm để trở về chương trình gọi nó và thực hiện tiếp tục những

câu lệnh của chương trình này. 

Page 36: C Programming in Linux - AT7B

3.2  CON TRỎ (Pointers)

-          Là một biến chứa địa chỉ của biến khác-          Con trỏ kiểu nào chỉ trỏ đến biến kiểu đó

-          Khai báo:<Kiểu dữ liệu> *<tên con trỏ>;

Vd:int  *p; // p là con trỏ trỏ đến các biên số nguyên

float *p1;-          Toán tử * và &

   Toán tử *: dùng để lấy giá trị tại địa chỉ đứng sau nó Toán tử &: dùng để lấy địa chỉ của biến

            Vd:int x=4;int *p;

// p trỏ vào x, nghĩa là p chứa địa chỉ của biến xP=&x;int y;

y=*p; //y=4

Page 37: C Programming in Linux - AT7B

-         Con trỏ mảng

VD: int a[10]; // a: địa chỉ của mảng a (a chứa địa chỉ của phần tử a[0])int *p;

P=a; // p trỏ vào phần tử a[0] => a[i] *(p+i)

-          Con trỏ cấu trúc

VD:struct HS{

  char ht[30],lop[5],dc[50];  float dT,dL,dH,dTong;

}; 

HS a[10],*p; // p: con trỏ cấu trúc

Page 38: C Programming in Linux - AT7B

3.3 Cấu trúc dữ liệu (Data Structures) Chúng ta có thể nhóm dữ liệu vào cấu trúc để quản lý một tập hợp các biến

như một nhóm để tiện cho việc xử lý.

Chương trình này sử dụng một cấu trúc để xác định một tập hợp các thuộc tính cho đối tượng player.

Page 39: C Programming in Linux - AT7B

Kết quả được hiển thị như sau:

Đây là một kĩ thuật mạnh và tương đối tiến bộ.Ý tưởng về cấu trúc dẫn trực tiếp tới ý tưởng về các lớp và các đối tượng.Nếu ta thực hiện thay đổi định nghĩa của các cấu trúc nó sẽ vẫn làm việc vàta cần có thêm mã để xử lý thuộc tính mới thay vì phải thay đổi danh sách đối sốhoặc chữ ký của các hàm để thực hiện công việc.

Page 40: C Programming in Linux - AT7B

4. Logic, loops and flow control

4.1 Cú pháp

4.2 Nên dùng khi nào?

4.3 Chương trình Demo

Page 41: C Programming in Linux - AT7B

4.1 Cú pháp

Ví dụ sử dụng for, while, do while

Page 42: C Programming in Linux - AT7B

4.1 Cú pháp

Ví dụ sử dụng if

Page 43: C Programming in Linux - AT7B

4.1 Cú pháp

Ví dụ sử dụng switch

Page 44: C Programming in Linux - AT7B

4.2 Nên dùng khi nào?

l Dùng for khi bạn biết điểm kết thúc

l Dùng while hay do while l khi làm 1 thứ cho đến khi điều kiện thay đổi.

l Dùng switch l khi số nguyên hay ký tự xác định những gì xảy ra tiếp theo.

l Dùng if khi mọi việc loại trừ nhau.

Page 45: C Programming in Linux - AT7B

4.3 Chương trình demo

l Mời bạn xem ví dụ demo :)

Page 46: C Programming in Linux - AT7B

Thanks for listening ^^!

Nhóm 9

Lớp AT7B

Học Viện Kỹ Thuật Mật Mã