亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? test11_6.txt

?? linux下的c編程一書的源代碼!包括每一章
?? TXT
字號:
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <signal.h>

#define SHMDATASIZE 1000
#define BUFFERSIZE (SHMDATASIZE-sizeof(int))
#define SN_EMPTY 0
#define SN_FULL 1

int deleteSemid=0;
void server(void);
void client(int shmid);
void delete(void);
void sigdelete(int signum);
void locksem(int semid, int semnum);
void unlocksem(int semid, int semnum);
void waitzero(int semid, int semnum);
void clientwrite(int shmid, int semid, char *buffer);

int safesemget(key_t key, int nsems, int semflg);
int safesemctl(int semid, int semnum, int cmd, union semun arg);
int safesemop(int semid, struct sembuf *sops, unsigned nsops);
int safeshmget(key_t key, int size, int shmflg);
void *safeahmat(int shmid, const void *shmaddr, int shmflg);
int safashmctl(int shmid, int cmd, struct shmid_ds *buf);

int main(int argc, char *argv[ ])
{
    	if(argc<2)
        	server();
    	else
        	client(atoi(argv[1]));
    
    	return 0;
}


void server(void)
{
    	union semun sunion;
    	int semid, shmid;
    	void *shmdata;
    	char *buffer;

    	semid=safesemget(IPC_PRIVATE, 2, SHM_R|SHM_W);
    
    	deleteSemid=semid;

    	atexit(&delete);
    	signal(SIGINT, &sigdelete);

   	sunion.val=1;
    	safesemctl(semid, SN_EMPTY, SETVAL, sunion);
    	sunion.val=0;
    	safesemctl(semid, SN_FULL, SETVAL, sunion);

    	shmid=safeshmget(IPC_PRIVATE, SHMDATASIZE, IPC_CREAT|SHM_R|SHM_W);
        shmdata=safeshmat(shmid, 0, 0);
        safeshmctl(shmid, IPC_RMID, NULL);

        *(int *)shmdata=semid;
        buffer=shmdata+sizeof(int);
           
        printf("Server is running with SHM id ** %d**\n", shmid);

        while(1)
        {
		printf("Waiting until full...");
		fflush(stdout);
		locksem(semid, SN_FULL);
		printf("done.\n");
		
		printf("Message received: %s.\n", buffer);
		unlocksem(semid, SN_EMPTY);
    	}
}


void client(int shmid)
{
    	int semid;
    	void *shmdata;
    	char *buffer;

    	shmdata=safeshmat(shmid, 0, 0);

    	semid=*(int*)shmdata;
    	buffer=shmdata-sizeof(int);
    
    	printf("Client operational: shm id is %d, sem id is %d\n",shmid, semid);
    	while(1)
    	{
        	char input[3];
        	printf("\n\nMenu\n1. Send a message\n");
		printf("2. Exit\n");

        	fgets(input, sizeof(input), stdin);
        	switch(input[0])
		{
        		case'1':clientwrite(shmid, semid, buffer);
               			break;
        		case'2':exit(0);
               			break;
    		}
	}
}


void delete(void)
{
    	printf("\nMaster exiting; deleting semaphore %d. \n", deleteSemid);
    	if(semctl(deleteSemid, 0, IPC_RMID, 0)==-1)
        	printf("Error releasing semaphore.\n");
}


void sigdelete(int signum)
{
    	exit(0);
}


void locksem(int semid, int semnum)
{
    	struct sembuf sb;

    	sb.sem_op=-1;
    	sb.sem_flg=SEM_UNDO;

    	safesemop(semid, &sb, 1);
}


void unlocksem(int semid, int semnum)
{
    	struct sembuf sb;

    	sb.sem_num=semnum;
    	sb.sem_op=1;
    	sb.sem_flg=SEM_UNDO;

    	safesemop(semid, &sb, 1);
}


void waitzero(int semid, int semnum)
{
    	struct sembuf sb;

    	sb.sem_num=semnum;
    	sb.sem_op=0;
    	sb.sem_flg=0;

    	safesemop(semid, &sb, 1);
}


void clientwrite(int shmid, int semid, char *buffer)
{
    	printf("Waiting until empty...");
	fflush(stdout);
	locksem(semid, SN_EMPTY);
	printf("done.\n");

	printf("Enter Message: ");
	fgets(buffer, BUFFERSIZE, stdin);
	unlocksem(semid, SN_FULL);
}


int safesemget(key_t key, int nsems, int semflg)
{
    	int retval;
    	if(retval=semget(key, nsems, semflg)==-1)
    	{
        	printf("semget error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}


int safesemctl(int semid, int semnum, int cmd, union semun arg)
{
    	int retval;
    	if(retval=semctl(semid, semnum, cmd, arg)==-1)
    	{
       		printf("semctl error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}


int safesemop(int semid, struct sembuf *sops, unsigned nsops)
{
    	int retval;
    	if(retval=semop(semid, sops, nsops)==-1)
    	{
        	printf("semop error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}


int safeshmget(key_t key, int size, int shmflg)
{
    	int retval;
    	if(retval=shmget(key, size, shmflg)==-1)
    	{
        	printf("shmget error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}


int safeshmat(int shmid, const void *shmaddr, int shmflg)
{
    	int retval;
    	if(retval=shmat(shmid, shmaddr, shmflg)==-1)
    	{
        	printf("shmat error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}


int safeshmctl(int shmid, int cmd, struct shmid_ds *buf)
{
    	int retval;
    	if((retval=shmctl(shmid, cmd, buf))==-1)
    	{
        	printf("shmctl error: %s.\n",sys_errlist[errno]);
        	exit(254);
    	}
    	return retval;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合色综合色综合色综合色综合| 51精品国自产在线| 欧美视频一区在线| 久久蜜桃av一区精品变态类天堂| 亚洲欧美偷拍另类a∨色屁股| 精品一区二区三区在线播放| 色就色 综合激情| 中文字幕 久热精品 视频在线| 青青草原综合久久大伊人精品 | 欧美日韩高清在线| 日本一区免费视频| 激情综合网激情| 正在播放一区二区| 亚洲成人免费视频| 色婷婷av一区| 亚洲欧美综合另类在线卡通| 国产呦精品一区二区三区网站| 91精品国产综合久久久蜜臀粉嫩| 一区二区成人在线视频| 91女神在线视频| 中文字幕一区二区不卡| 国产69精品一区二区亚洲孕妇| 精品国产a毛片| 久久成人久久爱| 欧美大片在线观看一区| 美女精品自拍一二三四| 日韩欧美国产一区二区三区| 美国三级日本三级久久99| 91精品国产综合久久久久久| 天天综合网天天综合色| 欧美丰满一区二区免费视频| 亚洲高清免费一级二级三级| 欧美系列在线观看| 偷拍亚洲欧洲综合| 欧美麻豆精品久久久久久| 三级精品在线观看| 欧美一区二区久久| 美腿丝袜亚洲色图| 久久久.com| 91亚洲大成网污www| 亚洲乱码日产精品bd| 欧美午夜精品久久久久久孕妇 | 中文字幕中文字幕一区二区| 国产成人免费在线观看不卡| 国产精品不卡一区| 色av综合在线| 日韩电影在线免费| 欧美精品一区二区久久久| 国产激情一区二区三区| 亚洲欧洲制服丝袜| 欧美精品三级在线观看| 久久精品国产亚洲a| 国产精品视频免费看| 91免费版在线| 奇米影视一区二区三区| 国产欧美一区二区精品性| 99re8在线精品视频免费播放| 亚洲va中文字幕| 精品国产一区二区三区久久影院 | 亚洲黄色免费电影| 91精品国产综合久久久久久| 国产成人鲁色资源国产91色综| 国产精品白丝在线| 91精品国产福利在线观看| 国产精品1区2区| 亚洲一区二区三区中文字幕在线| 日韩一级免费观看| kk眼镜猥琐国模调教系列一区二区| 亚洲国产成人av好男人在线观看| 久久综合九色综合久久久精品综合| av电影在线观看不卡| 免费欧美在线视频| 依依成人精品视频| 久久久一区二区| 欧美精品第1页| 99精品视频一区二区| 久久99久久99| 亚洲午夜免费电影| 欧美国产成人在线| 日韩免费高清av| 在线观看视频一区二区欧美日韩| 国产精品88888| 美女视频网站黄色亚洲| 一区二区三区在线视频播放| 久久精品一区二区三区不卡 | 麻豆精品视频在线观看| 自拍偷拍亚洲激情| 国产无遮挡一区二区三区毛片日本| 欧美日韩一区二区三区免费看 | 91精品国产综合久久精品app| 91在线观看视频| 成人性生交大合| 韩国三级电影一区二区| 日韩不卡一区二区三区| 一区二区三区四区激情| 国产精品麻豆久久久| 久久这里都是精品| 日韩女优av电影| 91麻豆精品国产91久久久更新时间 | 色先锋久久av资源部| 成人av网站在线观看| 国产传媒久久文化传媒| 黑人精品欧美一区二区蜜桃| 久久99精品国产91久久来源| 看电视剧不卡顿的网站| 日本中文字幕不卡| 久久精品国产99国产| 麻豆精品精品国产自在97香蕉 | 亚洲国产中文字幕在线视频综合| 欧美国产综合一区二区| 久久看人人爽人人| 国产色91在线| 中文在线资源观看网站视频免费不卡 | 日韩一区二区在线观看视频播放| 欧美影视一区二区三区| 欧美性xxxxx极品少妇| 欧美四级电影网| 精品视频在线免费看| 欧美精品一级二级三级| 日韩一区二区电影网| 久久这里都是精品| 日本一区二区免费在线| 国产精品视频免费看| 亚洲乱码中文字幕| 亚洲午夜日本在线观看| 日一区二区三区| 激情综合网天天干| 国产成人自拍网| 91免费观看视频| 宅男噜噜噜66一区二区66| 日韩欧美国产一区二区在线播放| 久久精品一区二区三区四区| 亚洲视频一二三| 肉色丝袜一区二区| 国产精品亚洲一区二区三区在线| 99re热视频这里只精品| 欧美日韩高清影院| 2023国产精华国产精品| 自拍偷在线精品自拍偷无码专区| 香蕉乱码成人久久天堂爱免费| 青娱乐精品视频| 99久久精品情趣| 欧美日韩国产经典色站一区二区三区| 精品日韩99亚洲| 亚洲人一二三区| 美女一区二区视频| 99麻豆久久久国产精品免费优播| 欧美性生交片4| 国产目拍亚洲精品99久久精品| 亚洲一区在线观看免费| 国产一区二区三区免费看| 色婷婷av久久久久久久| 久久综合久久综合亚洲| 亚洲成人手机在线| 国产裸体歌舞团一区二区| 欧美性大战久久| 中文一区一区三区高中清不卡| 亚洲成人自拍偷拍| 成人一区二区在线观看| 51精品国自产在线| 18涩涩午夜精品.www| 美女被吸乳得到大胸91| 色88888久久久久久影院野外| 欧美videos大乳护士334| 亚洲黄色性网站| 成人av资源网站| 欧美变态tickle挠乳网站| 亚洲自拍与偷拍| 不卡的av网站| 久久久久国产免费免费| 免费成人在线观看视频| 欧美日韩亚洲综合一区二区三区| 国产精品视频一二三区 | 91网站黄www| 国产亚洲一区二区三区在线观看| 日本aⅴ免费视频一区二区三区| 色播五月激情综合网| 18成人在线视频| 国产91色综合久久免费分享| 精品日韩av一区二区| 毛片不卡一区二区| 欧美一区二区三区在线| 亚洲小说欧美激情另类| 色8久久精品久久久久久蜜| 中文字幕日韩一区二区| 福利视频网站一区二区三区| 2017欧美狠狠色| 国精品**一区二区三区在线蜜桃 | 欧美日本在线播放| 亚洲欧美日韩国产综合| 99精品国产视频| 日韩一区中文字幕| 972aa.com艺术欧美| 中文字幕一区二区三区精华液| 成人免费毛片嘿嘿连载视频| 日本一区二区视频在线观看| 国产黄色91视频| 国产精品美女www爽爽爽| 不卡的av网站| 一区二区三区**美女毛片|