linux,linux作業系統

來源:互聯網
上載者:User

linux,linux作業系統

參考:

operatingfocus.bokee.com/3327857.html

www.oschina.net/code/snippet_237505_8646

www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

一.多進程編程裡常用的函數。

1.pid_t fork();

  建立子進程

2.int execl(const char * path,const char * arg,....);

  path是可執行檔路徑,  標頭檔#include<unistd.h>,該檔案時傳遞過去的argv(0)、argv[1]……,最後一個參數必須用null 指標(NULL)作結束。

3.int execlp(const char * file,const char * arg,……);

  execlp()會從PATH 環境變數所指的目錄中尋找符合參數file的檔案名稱,找到後便執行該檔案。

4.int execv (const char * path, char * const argv[ ]);

  path是檔案路徑

5.pid_t getpid(void);

  getpid()用來取得目前進程的進程識別碼

6.pid_t getppid(void);

   getppid()用來取得目前進程的父進程識別碼。

7.void setsid(void);

如 果調用此函數的進程不是一個進程組的組長,則此函數就會建立一個新會話,該進程變成會話的首進程,然後該進程成為一個新進程組的組長進程,該進程沒有控制 終端。因為會話首進程是具有唯一進程ID的單個進程,所以可以將會話首進程的進程ID視為會話Id。此函數配合umask()可將進程變成守護進程。

8.pid_t wait(int * status);

功能:阻塞該進程,直到其某個子進程退出.

9.pid_t wait (int * status);

  #include<sys/types.h>,#include<sys/wait.h>。wait()會暫時停止目前進程的執行,直到有訊號來到或子進程結束。回收殭屍進程

10.pid_t waitpid(pid_t pid,int * status,int options);

  參數 pid 為欲等待的子進程識別碼,其他數值意義如下:

     pid<-1 等待進程組識別碼為 pid 絕對值的任何子進程。     pid=-1 等待任何子進程,相當於 wait()。                 pid=0     等待進程組識別碼與目前進程相同的任何子進程。            pid>0     等待任何子進程識別碼為 pid 的子進程。

  參數 option 可以為 WNOHANG, 如果沒有任何已經結束的子進程則馬上返回, 不予以等待。

二.進程間的通訊

 1.訊號量

  1)  int sem_wait(sem_t *sem);

  //P操作,若是訊號量大於零則減一,否則阻塞在該函數位置等待.

  2)  int sem_post(sem_t *sem);

  //V操作,訊號量加一

  3)  sem_t *sem_open(const char *name, int oflag);

  //開啟訊號量,flag參數與開啟普通檔案的標記一樣

  4)  sem_t *(const char *name, int oflag,mode_t mode, unsigned int value);

  //建立並開啟訊號量,value參數指的是訊號量的初始值oflag參數可以是0、O_CREAT(建立一個號誌)或O_CREAT|O_EXCL(如果沒有指定的號誌就建立),

  其中mode參數指定許可權位(00777).

  5)  int sem_unlink(const char *name);

  //刪除系統建立的訊號量

  6)  int sem_close(sem_t *sem);

  //關閉徹底銷毀訊號量

 

 2.管道

 

 

  int pipe(int filedis[2]);

  標頭檔#include <unistd.h>,參數filedis返回兩個檔案描述符:filedes[0]為讀而開啟,filedes[1]為寫而開啟。filedes[1]的輸出是filedes[0]的輸入。

 

3.記憶體共用

  #include <sys/mman.h>

 

  void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset);

 

  int munmap(void *start, size_t length);

  例子:

    p_map = (people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

    p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);//匿名,適合父子進程之間

    munmap( p_map,sizeof(people)*10 );

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.