亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91高清在线观看| 99久久综合狠狠综合久久| 一区二区三区精密机械公司| 中文字幕av一区二区三区高 | 亚洲欧美色图小说| **网站欧美大片在线观看| 亚洲日本在线天堂| 亚洲制服丝袜av| 首页国产欧美久久| 久久国产成人午夜av影院| 国产一区二区美女诱惑| va亚洲va日韩不卡在线观看| 97超碰欧美中文字幕| 欧美日韩久久一区| 日韩欧美精品三级| 国产精品久久网站| 亚洲午夜久久久久久久久电影网| 五月婷婷色综合| 久久国产精品无码网站| 处破女av一区二区| 欧美亚洲禁片免费| 欧美刺激脚交jootjob| 国产精品网站导航| 亚洲一级片在线观看| 狠狠色狠狠色合久久伊人| 成人高清免费观看| 91精品在线一区二区| 樱桃视频在线观看一区| 偷拍日韩校园综合在线| 国产麻豆精品theporn| 色婷婷激情综合| 日韩欧美不卡在线观看视频| 国产精品国产三级国产aⅴ无密码| 亚洲综合丝袜美腿| 国产精品一区二区果冻传媒| 在线观看av一区| 久久一区二区三区国产精品| 亚洲男人的天堂一区二区| 久久99精品久久久久婷婷| 色综合婷婷久久| 国产无人区一区二区三区| 中文字幕制服丝袜成人av| 免费一区二区视频| 91性感美女视频| 日韩精品一区二区三区中文不卡| 18欧美亚洲精品| 极品销魂美女一区二区三区| 欧美三级电影在线看| 国产精品视频一二| 国产真实精品久久二三区| 欧美三日本三级三级在线播放| 欧美激情一区二区三区四区| 国产精品二区一区二区aⅴ污介绍| 男人操女人的视频在线观看欧美| 色综合久久99| 国产精品人妖ts系列视频| 国产主播一区二区三区| 亚洲激情六月丁香| av一区二区久久| 久久精品人人做人人爽人人| 九一九一国产精品| 日韩女优制服丝袜电影| 天天综合日日夜夜精品| 91福利在线免费观看| 亚洲少妇30p| caoporm超碰国产精品| 国产精品入口麻豆九色| 国产精品18久久久久久久久| 久久伊人中文字幕| 精品一区在线看| 日韩精品资源二区在线| 久久99深爱久久99精品| 日韩一区二区三区三四区视频在线观看 | 欧美视频第二页| 亚洲精品一卡二卡| 欧美性极品少妇| 亚洲1区2区3区视频| 欧美人动与zoxxxx乱| 婷婷国产在线综合| 日韩精品一区二区三区四区视频 | 粉嫩久久99精品久久久久久夜| 精品成人一区二区三区四区| 国产一区二区三区黄视频| 久久久久亚洲蜜桃| 成人午夜视频在线| 亚洲精品视频免费看| 欧美在线你懂的| 日本美女视频一区二区| 精品国产免费人成在线观看| 国产盗摄精品一区二区三区在线| 中文字幕不卡一区| 欧美色图在线观看| 久久99热99| 国产精品久久久久久久久图文区| 99精品久久只有精品| 亚洲www啪成人一区二区麻豆| 日韩一区二区三区观看| 国产不卡在线播放| 亚洲高清不卡在线观看| 精品国产自在久精品国产| 成人av先锋影音| 香蕉乱码成人久久天堂爱免费| 精品精品国产高清a毛片牛牛 | 国产免费成人在线视频| 99精品欧美一区二区蜜桃免费| 亚洲一二三区在线观看| 精品国产一区a| 91在线观看免费视频| 首页国产丝袜综合| 国产精品伦理一区二区| 在线不卡一区二区| 成人禁用看黄a在线| 婷婷成人综合网| 中文字幕欧美区| 5858s免费视频成人| 成人一区二区视频| 人人爽香蕉精品| 一区二区三区成人在线视频| 久久尤物电影视频在线观看| 欧美色图免费看| 国产v日产∨综合v精品视频| 秋霞午夜av一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 日韩精品中午字幕| 欧美日韩在线电影| 91在线视频在线| 国产.欧美.日韩| 精油按摩中文字幕久久| 午夜精品一区二区三区三上悠亚| 国产精品进线69影院| 久久综合中文字幕| 欧美一区二区视频在线观看2020| 色先锋久久av资源部| www.亚洲人| 国产成人午夜片在线观看高清观看| 日日欢夜夜爽一区| 亚洲午夜久久久久久久久久久| 日韩伦理av电影| 国产精品久久久久久久裸模| 国产情人综合久久777777| 日韩视频在线永久播放| 欧美一区二区三区日韩| 欧美一级在线观看| 56国语精品自产拍在线观看| 欧美色视频一区| 欧美午夜电影网| 色丁香久综合在线久综合在线观看| 成人久久视频在线观看| 国产不卡高清在线观看视频| 丰满亚洲少妇av| 成人av电影在线| 成人精品视频网站| av在线综合网| 在线观看av不卡| 欧美三级三级三级爽爽爽| 欧美日韩中文字幕一区| 欧美久久久一区| 欧美美女激情18p| 欧美高清视频一二三区| 日韩免费看的电影| 久久精品一区四区| 国产精品―色哟哟| 樱桃国产成人精品视频| 亚洲成人av福利| 久久精品国产亚洲5555| 国产在线一区二区| 成人蜜臀av电影| 日本乱人伦aⅴ精品| 欧美二区三区的天堂| 日韩欧美第一区| 蜜桃精品视频在线观看| 激情图片小说一区| 不卡在线视频中文字幕| 在线观看国产日韩| 欧美一区二区三区免费大片| 久久免费电影网| 亚洲少妇最新在线视频| 日韩高清不卡一区二区| 国产一区二区导航在线播放| 成人小视频在线| 欧美日韩国产一二三| 久久夜色精品国产噜噜av| 亚洲色大成网站www久久九九| 亚洲国产sm捆绑调教视频| 九一九一国产精品| 色婷婷久久久亚洲一区二区三区| 欧美一区二区三区婷婷月色| 国产日韩av一区二区| 亚洲成人自拍网| 国产ts人妖一区二区| 欧美日韩国产综合一区二区| 久久欧美一区二区| 午夜精品福利一区二区三区蜜桃| 国产精品伊人色| 欧美裸体一区二区三区| 国产精品日产欧美久久久久| 全部av―极品视觉盛宴亚洲| 在线亚洲+欧美+日本专区| 国产亚洲一区字幕| 日韩av高清在线观看|