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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ipc.c

?? 一個(gè)C語(yǔ)言編寫(xiě)的串口程序
?? C
字號(hào):
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <memory.h>
#include <errno.h>

extern int errno;
#include "ipc.h"

/* typedef long key_t  (IPC KEY) */ 
/* ipcs|ipcrm  IPC msg|sem|shm IPC ID IPC KEY */
/* struct ipc_perm { key_t key;
                     ushort uid;
                     ushort gid;
                     ushort cid;
                     ushort cgid;
                     ushort mode;}
*/



/**********************************************************
 Function msgCreate
   Create message queue
 Parameters :
	key    : key which identify message queue
 Return :
	iMsgId : message queue id

***********************************************************/
int msgCreate(key_t key)
{
  int iMsgId;
  
  iMsgId=msgget(key,IPC_CREAT | IPC_EXCL | QPERM);
  if (iMsgId<0) {
     if (errno==EEXIST) {
        ShowMsg("msg has exist! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
        iMsgId=msgget(key,QPERM);
        if (iMsgId<0) 
        {
        ShowMsg("msg open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
         return(MsgOpenFail);
        }
        return iMsgId;
     }
        ShowMsg("msg create failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return MsgCreateFail;
  };
  return iMsgId;
}

/**********************************************************
 Function msgOpen
   Open message queue , this queue must be existed .
 Parameters :
	key    : key which identify message queue
 Return :
	iMsgId : message queue id

***********************************************************/
int msgOpen(key_t key)  
{
  int iMsgId;

  if ((iMsgId=msgget(key,QPERM))==-1) {
     ShowMsg("msg open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return MsgOpenFail;
  }
  return iMsgId;
}

/**********************************************************
 Function msgStatus
   Output message queue status to a file
 Parameters :
	iMsgId : message queue id
	fpOut  : output file handle

***********************************************************/
int msgStatus(int iMsgId)
{
  struct msqid_ds msg_status;
  int i;

  if (msgctl(iMsgId,IPC_STAT,&msg_status) < 0 ) {
     return MsgStateFail;
  }
  /*printf("\nThe Msg Status is:"); */
  ShowMsg("msg id=%i\nuid=%i\ngid=%i\nmode=%o\n"
	  "msgnum=%i\nmsgqbytes=%i\ncbytes=%i\n"
	  "lspid=%i\nlrpid=%i\n",iMsgId,
	  msg_status.msg_perm.uid,msg_status.msg_perm.gid,
	  msg_status.msg_perm.mode,msg_status.msg_qnum,
	  msg_status.msg_qbytes,msg_status.msg_cbytes,msg_status.msg_lspid,
	  msg_status.msg_lrpid);
  return(0);
}


/**********************************************************
 Function msgSendBuf
   Send info to message queue
 Parameters :
	iMsgId   : message queue id
	lType    : message type identify message info in the same queue
	pszInfo  : info to be sent
	iInfoLen : length of info

***********************************************************/
int msgSend(int iMsgId , long lType , char *pszInfo , int iInfoLen)
{
  Mesg mesg;

  if (iInfoLen>MaxMesgLen)
   { ShowMsg("msg len error! len=%d,maxlen=%d\n",iInfoLen,MaxMesgLen);
     return (MsgMesgLenBad);}

  mesg.MesgId=lType;
  memcpy(mesg.MesgText,pszInfo,iInfoLen);
  if (msgsnd(iMsgId,&mesg,iInfoLen,0)==-1)	{
     ShowMsg("msg send failed! errno=%d error=%s\n",errno,strerror(errno));
     return MsgSendFail;
  }
  return (0);
}

/**********************************************************
 Function msgRecvBuf
   Receive info from message queue
 Parameters :
	iMsgId   : message queue id
	lType    : message type identify message info in the same queue
	pszInfo  : info buffer to be received
	iRecvLen : length of info
	iTimeOut : timeout , if =0 , nowait .

***********************************************************/
int msgRecv(int iMsgId , long *lType , char *pszInfo , int iExptLen)
{
  Mesg mesg;
  int iRecvLen;

  if (iExptLen>MaxMesgLen)
   { ShowMsg("msg len error! len=%d,maxlen=%d\n",iExptLen,MaxMesgLen);
     return (MsgMesgLenBad);}

   /*if ((iRecvLen=msgrcv(iMsgId,&mesg,iExptLen,lType,IPC_NOWAIT))==-1) {
	 return MsgRecvFail;
     }*/

     if ((iRecvLen=msgrcv(iMsgId,&mesg,iExptLen,*lType,0))==-1) {
     ShowMsg("msg recv failed! errno=%d error=%s\n",errno,strerror(errno));
	 return MsgRecvFail;
  }
  memcpy(pszInfo,mesg.MesgText,iRecvLen);
  *lType=mesg.MesgId;
  return iRecvLen;
}

/**********************************************************
 Function msgRemove
   Remove message queue
 Parameters :
	iMsgId   : message queue id

***********************************************************/
int msgRemove(int iMsgId)
{
  if (msgctl(iMsgId,IPC_RMID,0) <0) {
     ShowMsg("msg remove failed! errno=%d error=%s\n",errno,strerror(errno));
     return MsgRemoveFail;
  }
  return (0);
}

/*************************************************************
Function semCreate
  Create one array semaphores 
Parameters
	key : key of identifier
*************************************************************/
int semCreate(key_t key)
{
  int iSemId,iRet;

  iSemId=semget(key,1,IPC_CREAT | IPC_EXCL | QPERM);
  if (iSemId<0) {
     if (errno==EEXIST) {
        ShowMsg("sem existed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
        iSemId=semget(key,0,QPERM);
	if (iSemId<0) 
    {
     ShowMsg("sem open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return(SemOpenFail);
    }
        /************************************
  	iRet=semctl(iSemId,0,SETVAL,0);
  	if(iRet<0) return(SemSetValFail);
        ************************************/
        return(iSemId);
     }
     ShowMsg("sem create failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return(SemCreateFail);
  }

  iRet=semctl(iSemId,0,SETVAL,0);
  if(iRet<0) 
  { 
   ShowMsg("sem init 0 failed! key=%d sem=%d errno=%d error=%s\n",key,iSemId,errno,strerror(errno));
   return(SemSetValFail);
  }
  return(iSemId);
}

/*************************************************************
Function semOpen
  Open one array semaphores 
Parameters
	key : key of identifier
*************************************************************/
int semOpen(key_t key)
{
  int iSemId,iRet;

  iSemId=semget(key,0,QPERM);
  if (iSemId<0) {
     ShowMsg("sem open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return(SemOpenFail);
  }
  /*********************************
  iRet=semctl(iSemId,0,SETVAL,0);
  if(iRet<0) return(SemSetValFail);
  **********************************/
  return(iSemId);
}

/*************************************************************
Function semOn
  if value of semp is 1 , set to 0 
  if not return false 
Parameters
	iSemId : handle of semp
*************************************************************/
int semLock(int iSemId)
{ 
  struct sembuf sembuf;

  sembuf.sem_num=0;
  sembuf.sem_op=-1;
/*sembuf.sem_flg=IPC_NOWAIT | SEM_UNDO ;*/
  sembuf.sem_flg=0;
  if(semop(iSemId,&sembuf,1)<0)
  {
   ShowMsg("sem lock failed! errno=%d error=%s\n",errno,strerror(errno));
   return(SemLockFail);
  }
  return(0);
}

/*************************************************************
Function semOff
  if value of semp is 0 , add to 1 
  if not return false 
Parameters
	iSemId : handle of semp
*************************************************************/
int semUnlock(int iSemId)
{ 
  int iRet;
     
  struct sembuf sembuf;

  sembuf.sem_num=0;
  sembuf.sem_op=1;
/*sembuf.sem_flg=IPC_NOWAIT | SEM_UNDO ;*/
  sembuf.sem_flg=0;
  if(semop(iSemId,&sembuf,1)<0)
 {
   ShowMsg("sem unlock failed! errno=%d error=%s\n",errno,strerror(errno));
  return(SemUnlockFail);
  }
 
/*iRet=semctl(iSemId,0,SETVAL,1);
  if(iRet<0) return(SemSetValFail);*/

  return(0);
}

/*************************************************************
Function semRemove
  remove semaphores 
Parameters
	iSemId : handle of semp
*************************************************************/
int semRemove(int iSemId)
{
  int iRet;

  iRet=semctl(iSemId,0,IPC_RMID,0);
  if (iRet<0) {
     ShowMsg("sem Remove Failed errno=%d error=%s\n",errno,strerror(errno));
     return(SemRemoveFail);
  }
  return(0);
}

int semGetVal(int iSemId)
{ int semval;
  semval=semctl(iSemId,0,GETVAL,0);
  return (semval);
}
int semSetVal(int  iSemId,int val)
{ 
/*union semun semopt;
  semopt.val=val;*/
  semctl(iSemId,0,SETVAL,val);
}

int shmCreate(key_t key,int size)
{
  int iShmId;
  
  iShmId=shmget(key,size,IPC_CREAT | IPC_EXCL | QPERM);
  if (iShmId<0) {
     if (errno==EEXIST) {
        ShowMsg("shm has exist! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
        iShmId=shmget(key,size,QPERM);
        if (iShmId<0) 
        {
        ShowMsg("shm open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
         return(ShmOpenFail);
        }
        return iShmId;
     }
        ShowMsg("shm create failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return ShmCreateFail;
  };
  return iShmId;
}

int shmOpen(key_t key,int size)  
{
  int iShmId;

  if ((iShmId=shmget(key,size,QPERM))==-1) {
     ShowMsg("shm open failed! key=%d errno=%d error=%s\n",key,errno,strerror(errno));
     return ShmOpenFail;
  }
  return iShmId;
}

int shmRemove(int iShmId)
{
  int iRet;

  iRet=shmctl(iShmId,IPC_RMID,0);
  if (iRet<0) {
     ShowMsg("shm Remove Failed errno=%d error=%s\n",errno,strerror(errno));
     return(ShmRemoveFail);
  }
  return(0);
}

char *shmConnect(int iShmId)
{ char *addr;
  addr=shmat(iShmId,0,0);
  if (addr==NULL)
  { 
     ShowMsg("shm Connect Failed errno=%d error=%s\n",errno,strerror(errno));
     return(NULL);
  }
  return(addr);
}

int shmDisConnect(char *addr)
{ 
  if (shmdt(addr)!=0)
  { 
     ShowMsg("shm DisConnect Failed errno=%d error=%s\n",errno,strerror(errno));
     return(ShmDisConnectF);
  }
  return(0);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线电影| 久久精品国产亚洲一区二区三区 | 欧美性猛片aaaaaaa做受| 免费人成在线不卡| 亚洲欧美经典视频| 久久久综合激的五月天| 在线观看一区二区视频| 国产精品一区二区无线| 亚洲综合免费观看高清完整版在线| 精品乱码亚洲一区二区不卡| 在线观看成人小视频| 成人黄色国产精品网站大全在线免费观看| 亚洲国产一区二区视频| 国产精品乱码人人做人人爱 | 欧美一级欧美三级在线观看| 色综合久久久久久久| 国产一区二三区| 日韩电影免费在线看| 亚洲一区在线电影| 国产精品亚洲专一区二区三区| 五月激情综合色| 樱桃国产成人精品视频| 国产精品午夜春色av| 精品99999| 精品国产1区二区| 日韩一本二本av| 在线成人av影院| 欧美日韩高清一区二区| 欧美色手机在线观看| 一本色道久久综合狠狠躁的推荐| 成人精品视频一区| 风间由美一区二区三区在线观看| 国产一区二区精品在线观看| 久久精品国产亚洲a| 久久电影国产免费久久电影| 日本美女视频一区二区| 天天亚洲美女在线视频| 午夜久久久久久久久久一区二区| 亚洲一区二区av电影| 亚洲午夜一区二区| 亚洲国产欧美日韩另类综合 | 国产精品伦理在线| 中文字幕不卡的av| 国产精品美女久久久久高潮| 中文字幕一区二区三区蜜月| 亚洲色图另类专区| 亚洲精品成人在线| 视频一区在线播放| 美女在线观看视频一区二区| 美女一区二区久久| 国产精品影视天天线| 高清在线观看日韩| 91同城在线观看| 欧美三级中文字幕在线观看| 亚洲国产精品久久久久秋霞影院| 亚洲一区二区三区四区在线观看 | 国产婷婷色一区二区三区在线| 欧美精品一区二区高清在线观看| 久久九九全国免费| 国产精品家庭影院| 亚洲一区二区在线免费观看视频| 日日骚欧美日韩| 国产综合色视频| 97se狠狠狠综合亚洲狠狠| 色老汉一区二区三区| 制服丝袜亚洲播放| 久久久久国产精品厨房| 最新不卡av在线| 午夜精品福利久久久| 国产在线精品一区二区夜色 | 日韩欧美一级在线播放| 久久精品亚洲精品国产欧美| 国产91在线观看丝袜| 99re这里只有精品首页| 欧美亚洲丝袜传媒另类| 欧美v亚洲v综合ⅴ国产v| 亚洲国产精品精华液ab| 亚洲一区二区三区四区在线观看 | 日韩美女在线视频| 中文字幕av不卡| 天天色 色综合| 国产99久久久精品| 欧美中文字幕亚洲一区二区va在线| 日韩精品中文字幕一区| 中文字幕一区二区三区在线不卡 | 国产美女视频一区| 日本精品一区二区三区高清| 欧美videos大乳护士334| 日韩理论片中文av| 久久成人羞羞网站| 在线观看国产精品网站| 国产午夜亚洲精品羞羞网站| 亚洲成人av电影在线| 国产成人综合在线| 欧美一区二区三区在线看| 中文字幕亚洲区| 精品一区二区在线视频| 欧美天天综合网| 中文字幕av不卡| 精品一区二区综合| 欧美日韩激情一区二区| 国产精品三级av在线播放| 久久精品久久综合| 精品污污网站免费看| 亚洲欧洲日韩在线| 国产精品一区二区91| 在线成人av网站| 亚洲黄一区二区三区| 成人h精品动漫一区二区三区| 欧美videos大乳护士334| 无码av中文一区二区三区桃花岛| 91婷婷韩国欧美一区二区| 精品亚洲免费视频| 欧美日韩一区二区三区在线| 1区2区3区欧美| 成人永久aaa| 国产日韩欧美不卡| 精品亚洲国产成人av制服丝袜 | 99久久精品免费看国产| 久久香蕉国产线看观看99| 免费观看日韩电影| 91精品在线观看入口| 亚洲国产成人高清精品| 在线观看日产精品| 一区二区久久久久久| 色综合久久天天| 亚洲天堂2014| 91欧美一区二区| 综合欧美亚洲日本| 99久久99久久久精品齐齐| 国产精品网站在线| 成人一级黄色片| 国产精品国产精品国产专区不蜜 | 美女精品一区二区| 日韩欧美国产一二三区| 麻豆精品一区二区三区| 日韩一级视频免费观看在线| 日韩福利电影在线| 在线综合+亚洲+欧美中文字幕| 图片区日韩欧美亚洲| 7777精品伊人久久久大香线蕉完整版| 亚洲第四色夜色| 欧美一区二区三区播放老司机| 日韩二区三区四区| 精品少妇一区二区三区在线播放 | 国产精品久久二区二区| 99精品欧美一区| 亚洲免费观看高清完整版在线观看熊| 91美女精品福利| 亚洲mv在线观看| 日韩一卡二卡三卡四卡| 国产精品一区二区在线观看网站| 国产精品网站在线观看| 91婷婷韩国欧美一区二区| 亚洲国产毛片aaaaa无费看 | 日韩国产欧美在线播放| 精品少妇一区二区三区视频免付费 | 午夜一区二区三区在线观看| 日韩欧美一二区| 成人一级片网址| 一区二区三区在线播放| 91精品国产综合久久香蕉麻豆| 日本不卡一二三| 国产欧美日本一区视频| 91成人国产精品| 久久精品国产99国产| 欧美国产激情二区三区| 欧美影院午夜播放| 精品一区二区三区免费毛片爱 | 国产亚洲精品免费| 99久久国产综合精品女不卡| 亚洲高清视频在线| 精品sm在线观看| 一本色道a无线码一区v| 日本成人在线不卡视频| 国产精品久久精品日日| 制服.丝袜.亚洲.另类.中文| 懂色av一区二区夜夜嗨| 亚洲国产一二三| 国产日韩欧美在线一区| 欧美色综合久久| 国产盗摄视频一区二区三区| 亚洲国产色一区| 久久精品欧美日韩| 欧美日韩三级在线| 成人免费视频网站在线观看| 午夜国产精品影院在线观看| 国产天堂亚洲国产碰碰| 欧美日韩精品一区二区三区 | 亚洲女女做受ⅹxx高潮| 欧美成人欧美edvon| 日本韩国欧美在线| 国产乱人伦精品一区二区在线观看| 樱花草国产18久久久久| 久久久久久久免费视频了| 欧美福利视频一区| 91视视频在线观看入口直接观看www| 麻豆成人av在线| 亚洲国产精品一区二区www在线| 中文字幕二三区不卡|