1. 程式人生 > >linux程式設計基礎

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 呼叫執行方式(堵塞/非堵塞)