歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

linux,linux操作系統

linux,linux操作系統


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)作結束。

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 );

 

http://xxxxxx/Linuxjc/1148262.html TechArticle

Copyright © Linux教程網 All Rights Reserved