Linux一些重要的標頭檔__Linux

來源:互聯網
上載者:User
1.系統調用 ---檔案的操作函數

#inlclude <fcntl.h>

int  open(char *name,int how)   檔案開啟

#include <unistd.h>

int  close(int fd)      檔案關閉

size_t   read(int fd,void *buf, size_t count)   讀

size_t   write(int fd,const void *buf,size_t count)  寫

sleep(1)   系統睡眠一秒鐘,最小單位為一秒。

#include <stdio.h>

perror("會出現錯誤的函數名")

#include <string.h>

char*  strerror(int errnum)   依據錯誤碼errnum來尋找錯誤原因字串

char*  strcpy(char *dest,const char *src)

int      strcmp(char *s1,const char *s2)    s1若等於s2的值則返回0值

int      strncmp(char *s1,const char *s2,int n)  前n個字串比較

  2.進程式控制制函數

#include <unistd.h>

pid_t  fork(void)   子進程中返回0 父進程中返回子進程ID出錯返回-1

pid_t  getpid(void)  擷取進程號
pid_t  getppid(void)

pid_t  vfork(void)

exec函數族

進程pid的類型為pid_t 類型,它包含於#include<sys/types.h> 若定義一個進程pid變數,則需要包含此標頭檔

exit(n) 結束進程 父進程可以由wait函數來獲得子進程結束裝狀態。

在進程結束的時候,會關閉檔案描述符號,做一些清理工作,只保留進程返回狀態等資訊

調用exit(),子進程會關閉所有開啟的進程描述符  exit會作清理工作,比如說,釋放記憶體(在C++裡面會主動的調用解構函式,),關閉檔案控制代碼的工作,包括重新整理IO流。

_exit(n)直接退出,不會做一些清理工作,也不會關閉檔案描述符。

#include <sys/wait.h>

pid_t  wait(int *status)  等待任意子進程結束。子進程結束狀態值由status返回。

如WEXITSTATUS(status)可以獲得exit(2)中返回的值,status=2,這樣就可以知道所等待的為哪個進程。如果不用這個宏轉換,則status=512.

pid_t  waitpid(pid_t pid,int status,int options) 可以指定等待某個進程號pid的進程結束

在使用waitpid函數時還用到了pid參數,所以還要加上#include<sys/types.h>

關於進程等待函數還有很多宏將status轉換為需要的值,需要瞭解。

  3.處理序間通訊-管道

#include <unistd.h>

int pipe(int filedes[2])

  4.處理序間通訊-具名管道

#include <sys/types.h> 
#include <sys/stat.h>

int mkfifo(const char *pathname,mode_t mode)

對於具名管道的操作同普通檔案的操作

  5.訊息佇列

資料類型key_t是在標頭檔sys/types.h中定義的,它是一個長整形的資料。

key=ftok(".",'A')  #include <sys/types.h> #include<sys/ipc.h>

 

所屬標頭檔:#include<sys/types.h>#include <sys/ipc.h> #include <sys/msg.h>

intmsgid;

msgid=msgget(key,IPC_CREAT | IPC_EXCL | 0666);

structmsg

{

    long mtype;

    char mtext[50];

}msg1,msg2;  //訊息佇列緩衝區

intrcvtype=1;

msgsnd(msgid,&msg1,6,0)  6個位元組,最後一個參數填寫為0表示函數調用阻塞直到滿足條件為止。

msgrcv(msgid,&msg2,6,rcvtype,0)   最後一個參數也可為IPC_NOWAIT,沒有收到訊息返回-1

msgctl(msgid,IPC_RMID,NULL);  刪除訊息佇列

  6.處理序間通訊-訊號

#include<signal.h>

int kill(pid_t pid,int sig)

int raise(int signo);進程向自身發送訊號
raise(signo)等價於kill(getpid(),signo);

alarm(2)定時兩秒後,產生SIGALRM訊號,系統預設處理是結束進程。

 

int pause(void) //pause函數使調用進程掛起直至捕捉到一個訊號。

signal(SIGINT,ctrl_c)  ctrl_c為函數名 功能:發出訊號後,調用訊號處理函數

  7.訊號集合函式組  阻塞訊號

訊號集資料結構的定義,sigset_t為結構體資料類型

sigset_t intmask;

sigemptyset(&intmask);

sigaddset(&intmask,SIGINT);

sigdelset(&intmask,SIGINT);

sigprocmask(inthow,const sigset_t *set,sigset_t *oset)

sigpromask(SIGBLOCK,&intmask,NULL)

  8.線程

#include<pthread.h>

線程ID類型為pthread_t 為結構體類型

獲得線程ID的辦法
pthread_t tid; 
tid=pthread_self();

 

pthread_create(&tid,NULL,thread,NULL)  第二個參數為線程屬性,第三個參數為線程。第四個參數是可以向該線程傳遞參數。   線程void *thread(void *arg)

pthread_exit((void*)2)  //與return((void*)2)的區別。誰可以解答。。。

void*tret;

pthread_join(tid,&tret);

pthread_cancel(tid);

pthread_cleanup_push(fun,NULL);第一個參數為清理函數,第二個為傳參,線程清理處理常式

pthread_cleanup_pop(0);0表示線程結束時不執行清理函數,非0執行,兩函數配對使用。

調用pthread_exit時,或響應取消時,即使是pthread_cleanup_pop(0);也執行清理函數。

 

互斥鎖

互斥鎖類型為pthread_mutex_t mutex1

pthread_mutex_init(&mutex1,NULL)互斥鎖的建立,第二個參數為空白,表示預設屬性。

pthread_mutex_destory(&mutex1)清除一個互斥鎖

pthread_mutex_lock(&mutex1)

pthread_mutex_unlock(&mutex1)

 

訊號量

#include<semaphore.h>

訊號量的類型sem_t sem1;

sem_init(&sem1,0,n)訊號量的初始化,第二個參數Linux沒能實現在進程間訊號量的共用,所以值為0。

第三個參數為無符號整型,n表示訊號量初始化的值

sem_wait(&sem1)  P操作

sem_post(&sem1)  V操作

用PV實現線程間的互斥與同步功能

intsem_getvalue(sem_t *sem) 取得訊號量的值

intsem_destroy(sem_t *sem) 刪除訊號量

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.