歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> linux,linux操作系統

linux,linux操作系統

日期:2017/3/6 9:24:10   编辑:學習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