freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux下c編程高效手冊(cè)-資料下載頁(yè)

2025-06-29 10:20本頁(yè)面
  

【正文】 )return 1。if(old_mail_size。0) send_mail_notify()。sleep(SLEEP_TIME)。while(1){if(sigprocmask(SIG_BLOCK,amp。blockset,NULL)0) return 1。while(notifyflag==0)sigsuspend(amp。emptyset)。if(sigprocmask(SIG_SETMASK,amp。emptyset,NULL)0) return 1。new_mail_size=get_file_size(filename)。if(new_mail_size。old_mail_size)send_mail_notify。old_mail_size=new_mail_size。sleep(SLEEP_TIME)。}}int main(void){char mailfile[MAX_FILENAME]。struct sigaction newact。struct passwd *pw。if((pw=getpwuid(getuid()))==NULL){fprintf(stderr,Get Login Name Error:%s\n\a,strerror(errno))。exit(1)。}strcpy(mailfile,MAIL_DIR)。strcat(mailfile,pw。pw_name)。=turn_on_notify。=0。sigemptyset(amp。)。sigaddset(amp。,SIGUSR1)。sigaddset(amp。,SIGUSR2)。if(sigaction(SIGUSR1,amp。newact,NULL)0)fprintf(stderr,Turn On Error:%s\n\a,strerror(errno))。=turn_off_notify。if(sigaction(SIGUSR1,amp。newact,NULL)0)fprintf(stderr,Turn Off Error:%s\n\a,strerror(errno))。check_mail(mailfile)。exit(0)。}信號(hào)操作是一件非常復(fù)雜的事情,比我們想象之中的復(fù)雜程度還要復(fù)雜,如果你想徹底的弄清楚信號(hào)操作的各個(gè)問(wèn)題,只是一般的使用的話,有了上面的幾個(gè)函數(shù)也就差不多了. 我們就介紹到這里了.6)Linux程序設(shè)計(jì)入門消息管理前言:Linux下的進(jìn)程通信(IPC)Linux下的進(jìn)程通信(IPC)POSIX無(wú)名信號(hào)量System V信號(hào)量System V消息隊(duì)列System V共享內(nèi)存1。POSIX無(wú)名信號(hào)量 如果你學(xué)習(xí)過(guò)操作系統(tǒng),在一定的時(shí)間內(nèi),只能夠有一個(gè)進(jìn)程的代碼在CPU上面,有時(shí)候?yàn)榱隧樌氖褂煤捅Wo(hù)共享資源,大家提出了信號(hào)的概念. 假設(shè)我們要使用一臺(tái)打印機(jī),如果在同一時(shí)刻有兩個(gè)進(jìn)程在向打印機(jī)輸出,那么最終的結(jié)果會(huì),POSIX標(biāo)準(zhǔn)提出了有名信號(hào)量和無(wú)名信號(hào)量的概念,由于Linux只實(shí)現(xiàn)了無(wú)名信號(hào)量,我們?cè)谶@里就只是介紹無(wú)名信號(hào)量了. 信號(hào)量的使用主要是用來(lái)保護(hù)共享資源,。示可以使用. 為了提供效率,系統(tǒng)提供了下面幾個(gè)函數(shù)POSIX的無(wú)名信號(hào)量的函數(shù)有以下幾個(gè):include 。int sem_init(sem_t *sem,int pshared,unsigned int value)。int sem_destroy(sem_t *sem)。int sem_wait(sem_t *sem)。int sem_trywait(sem_t *sem)。int sem_post(sem_t *sem)。int sem_getvalue(sem_t *sem)。sem_init創(chuàng)建一個(gè)信號(hào)燈,所以這個(gè)值只能夠取0. sem_dest,是將信號(hào)燈的內(nèi)容加一同時(shí)發(fā)出信號(hào)喚醒等待的進(jìn)程..sem_trywait和sem_wait相同,不過(guò)不阻塞的,當(dāng)信號(hào)燈的值為0的時(shí)候返回EAGAIN,.由于Linux不支持,我們沒(méi)有辦法用源程序解釋了.首先創(chuàng)建一個(gè)信號(hào)燈,并使其初始值為1,m_wait由于這個(gè)時(shí)候信號(hào)燈的值為1,所以這個(gè)函數(shù)返回,打印機(jī)開(kāi)始打印了,同時(shí)信號(hào)燈的值為0 了. 如果第二個(gè)進(jìn)程要打印,調(diào)用sem_wait時(shí)候,由于信號(hào)燈的值為0,資源不可用,調(diào)用sem_post信號(hào)燈的值為1了,這個(gè)時(shí)候系統(tǒng)通知第二個(gè)進(jìn)程,.面這幾個(gè)函數(shù)的程序要加上 lrt選賢,2。System V信號(hào)量 為了解決上面哪個(gè)問(wèn)題,我們也可以使用System 是Linux實(shí)現(xiàn)了System . System V信號(hào)量的函數(shù)主要有下面幾個(gè).include sys/。include sys/。include sys/。key_t ftok(char *pathname,char proj)。int semget(key_t key,int nsems,int semflg)。int semctl(int semid,int semnum,int cmd,union semun arg)。int semop(int semid,struct sembuf *spos,int nspos)。struct sembuf {short sem_num。 /* 使用那一個(gè)信號(hào) */short sem_op。 /* 進(jìn)行什么操作 */short sem_flg。 /* 操作的標(biāo)志 */}。信號(hào)的ID,key是一個(gè)關(guān)鍵字,可以是用ftok創(chuàng)建的也可以是IPC_PRIVATE表明由系統(tǒng)選用一個(gè)關(guān)鍵字. ,和我們創(chuàng)建一個(gè)文件的標(biāo)志相同.,semnum是信號(hào)的個(gè)數(shù),cm:SETVAL(設(shè)置信號(hào)量的值)和IPC_RMID(刪除信號(hào)燈).arg是一個(gè)給cmd的參數(shù).,spos是一個(gè)操作數(shù)組表明要進(jìn)行什么操作,nspos表明數(shù)組的個(gè)數(shù). 如果sem_op大于0,那么操作將sem_op加入到信號(hào)量的值中,并喚醒等待信號(hào)增加的進(jìn)程. 如果為0,當(dāng)信號(hào)量的值是0的時(shí)候,函數(shù)返回,否則阻塞直到信號(hào)量的值為0. 如果小于0,信號(hào)量為0的進(jìn)程,那么從信號(hào)量里面減去這個(gè)值并返回.. 們用的打印機(jī).include 。include 。include 。include 。include 。include 。include sys/。include sys/。include sys/。include sys/。define PERMS S_IRUSR|S_IWUSRvoid init_semaphore_struct(struct sembuf *sem,int semnum,int semop,int semflg){/* 初始話信號(hào)燈結(jié)構(gòu) */sem。sem_num=semnum。sem。sem_op=semop。sem。sem_flg=semflg。}int del_semaphore(int semid){/* 信號(hào)燈并不隨程序的結(jié)束而被刪除,如果我們沒(méi)刪除的話(將1改為0)可以用ipcs命令查看到信號(hào)燈,用ipcrm可以刪除信號(hào)燈的*/if 1return semctl(semid,0,IPC_RMID)。endif}int main(int argc,char **argv){char buffer[MAX_CANON],*c。int i,n。int semid,semop_ret,status。pid_t childpid。struct sembuf semwait,semsignal。if((argc!=2)||((n=atoi(argv[1]))1)){fprintf(stderr,Usage:%s number\n\a,argv[0])。exit(1)。}/* 使用IPC_PRIVATE 表示由系統(tǒng)選擇一個(gè)關(guān)鍵字來(lái)創(chuàng)建 *//* 創(chuàng)建以后信號(hào)燈的初始值為0 */if((semid=semget(IPC_PRIVATE,1,PERMS))==1){fprintf(stderr,[%d]:Acess Semaphore Error:%s\n\a,getpid(),strerror(errno))。exit(1)。}/* semwait是要求資源的操作(1) */init_semaphore_struct(amp。semwait,0,1,0)。/* semsignal是釋放資源的操作(+1) */init_semaphore_struct(amp。semsignal,0,1,0)。/* 開(kāi)始的時(shí)候有一個(gè)系統(tǒng)資源(一個(gè)標(biāo)準(zhǔn)錯(cuò)誤輸出) */if(semop(semid,amp。semsignal,1)==1){fprintf(stderr,[%d]:Increment Semaphore Error:%s\n\a,getpid(),strerror(errno))。if(del_semaphore(semid)==1)fprintf(stderr,[%d]:Destroy Semaphore Error:%s\n\a,getpid(),strerror(errno))。exit(1)。}/* 創(chuàng)建一個(gè)進(jìn)程鏈 */for(i=0。in。i++)if(childpid=fork()) break。sprintf(buffer,[i=%d]。[Process=%d]。[Parent=%d]。[Child=%d]\n,i,getpid(),getppid(),childpid)。c=buffer。/* 這里要求資源,進(jìn)入原子操作 */while(((semop_ret=semop(semid,amp。semwait,1))==1)amp。amp。(errno==EINTR))。if(semop_ret==1){fprintf(stderr,[%d]:Decrement Semaphore Error:%s\n\a,getpid(),strerror(errno))。}else{while(*c!=39。\039。)fputc(*c++,stderr)。/* 原子操作完成,趕快釋放資源 */while(((semop_ret=semop(semid,amp。semsignal,1))==1)amp。amp。(errno==EINTR))。if(semop_ret==1)fprintf(stderr,[%d]:Increment Semaphore Error:%s\n\a,getpid(),strerror(errno))。}/* 不能夠在其他進(jìn)程反問(wèn)信號(hào)燈的時(shí)候,我們刪除了信號(hào)燈 */while((wait(amp。status)==1)amp。amp。(errno==EINTR))。/* 信號(hào)燈只能夠被刪除一次的 */if(i==1)if(del_semaphore(semid)==1)fprintf(stderr,[%d]:Destroy Semaphore Error:%s\n\a,getpid(),strerror(errno))。exit(0)。} 信號(hào)燈的主要用途是保護(hù)臨界資源(在一個(gè)時(shí)刻只被一個(gè)進(jìn)程所擁有).3。SystemV消息隊(duì)列 為了便于進(jìn)程之間通信,我們可以使用管道通信 SystemV也提供了.include sys/。include sys/。include sys/。int msgget(key_t key,int msgflg)。int msgsnd(int msgid,struct msgbuf *msgp,int msgsz,int msgflg)。int msgrcv(int msgid,struct msgbuf *msgp,int msgsz,long msgtype,int msgflg)。int msgctl(Int msgid,int cmd,struct msqid_ds *buf)。struct msgbuf {long msgtype。 /* 消息類型 */....... /* 其他數(shù)據(jù)類型 */}msgget函數(shù)和semget一樣,.. . . 結(jié)構(gòu)msgbuf包含的內(nèi)容是至少有一個(gè).. 接收函數(shù)msgtype指出接收消息時(shí)候的操作.如果msgtype=0,息. 端后運(yùn)行客戶端.服務(wù)端 include 。include 。include 。include 。include 。include sys/。include sys/。include sys/。include sys/。define MSG_FILE define BUFFER 255define PERM S_IRUSR|S_IWUSRstruct msgtype {long mtype。char buffer[BUFFER+1]。}。int main(){struct msgtype msg。key_t key
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1