linux程式設計基礎
我們這門是考察課,選的是黑馬教程的書,感覺還是很基礎的,而且學校老師給了程式碼就不講了,通過部落格把知識點梳理下,有時間去圖書館借幾本linux的專業的書看看,特別是講shell這一塊的吧!,寫這些是自己梳理下知道點,未來自己掌握,不是供其他人看,不好意思了!
第一章
安裝CentOS和遠端登入,用華為和華三軟體遠端都行
第二章
linux常用命令,上學期學過 ubuntu,所以命令基本都知道,忘記看下就會了,
網路命令 考軟設的時候考到了,要是找點看這書那個題也不會錯了,唉!
netstat 列印linux系統中網路的狀態資訊,顯示埠資訊
第三章
使用者管理,上學期學過
第四章
shell程式設計 老師直接跳過,這個其實很重要,有時間去圖書館補習下shell
第五章
linux檔案系統,學過作業系統,不過這個是講linux的,一些檔案儲存,大致瞭解了下,
檔案I/O, 用的是c語言寫的,這個我學c的時候看了下,但記不住,知道那個意思,二次c語言優秀,但以後肯定是java,c就學 的少了。
第六章
程序管理
PCB本質是task_struct結構體 程序pid 父程序ppid,書上給了一些c語言程序程式碼
fork() 建立子程序,沒什麼好看的,要是給java程式碼就好了
wait() 呼叫此函式程序會掛起,當子程序退出時,此程序才執行
第七章
訊號 :中斷訊號
int kill(pid_t pid, int sig) pid為接收訊號的程序 sig表示要傳送的訊號編號
pid>0,傳送訊號sig給程序號為pid程序 pid=0 傳送訊號sig給當前程序所屬組中的所有程序
pid=-1,傳送訊號sig給除1號程序與當前程序外的所有程序 pid<-1 傳送訊號sig給屬於程序組pid所有程序
這章整體來說就是一些訊號作用及函式
第八章
程序間的通訊
建立管道 int pipe(int pipefd[2]);
管道通訊 int dup2(int oldfd,int newfd); 將引數oldfd檔案描述符傳遞給newld 成功返回newld 否則返回-1
.....
第九章
建立執行緒
int pthread_create(pthread_t *thread,NULL,fun,NULL);
獲取id pthread_t pthread_self(void);
退出執行緒 pthread_exit(NULL);
執行緒終止 int pthread_cancel(pthread_t thread);
執行緒掛起 int pthread_join(pthread_t thread,void **retval);
......不寫了,都是關於執行緒的函式
第十章
socket程式設計,計算機網路,五層協議......這個感覺還是蠻重要的
1. 建立套接字 int socket(int domain,int type,int protocol);
domain 指定通訊域,選擇通訊的地址族,常用設定AF_INET和AF_UNIX ,前者針對因特網,可與遠端的通訊端連線通訊
後者針對本地程序,可在本地系統程序間進行通訊
type 指定socket的型別,即選擇哪個協議 protocol 設定為0,表示預設協議
2. int bind(int sockfd , const struct sockaddr *addr,socklen_t addrlen);
bing()用於伺服器端,呼叫bind()函式進行地址繫結
sockfd為檔案描述符 addr:伺服器的通訊地址 addrlen 表示addr的長度
struct sockaddr_in servaddr; //結構體定義
bzero(&servaddr,sizeof(servaddr)); //結構體清0
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(85);
INADDR_ANY選項
網路程式設計中常用到bind函式,需要繫結IP地址,這時可以設定INADDR_ANY
INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。
也就是表示本機的所有IP,因為有些機子不止一塊網絡卡,多網絡卡的情況下,這個就表示所有網絡卡ip地址的意思。
比如一臺電腦有3塊網絡卡,分別連線三個網路,那麼這臺電腦就有3個ip地址了,如果某個應用程式需要監聽某
個埠,那他要監聽哪個網絡卡地址的埠呢?如果繫結某個具體的ip地址,你只能監聽你所設定的ip地址所在的網
卡的埠,其它兩塊網絡卡無法監聽埠,如果我需要三個網絡卡都監聽,那就需要繫結3個ip,也就等於需要管理3個
套接字進行資料交換,這樣豈不是很繁瑣?
所以你只需繫結INADDR_ANY,管理一個套接字就行,不管資料是從哪個網絡卡過來的,
只要是繫結的埠號過來的資料,都可以接收到。
當然, 客戶端connect時,不能使用INADDR_ANY選項。必須指明要連線哪個伺服器IP。
3.listen(int sockfd,int backlog); 用於服務端 sockfd表示socket檔案描述符, backlog設定佇列的最大長度
4. accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
sockfd為listen()函式返回監聽套接字 , addr是傳出引數,表示客戶端的地址
5. connect(int sockfd, sonst struct sockaddr *addr,socklen_t addrlen); 用於客戶端
向伺服器發起連線請求,與bing()函式相似
6. ssize_t send(int sockfd, const void *buf, size_t len, int flags);
向處於連線狀態的套接字中傳送資料 sockfd檔案描述符 ,buf資料緩衝區,flags 呼叫執行方式(堵塞/非堵塞)