ÀÖÓãµç¾º

  • ½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

    È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

    C++Åàѵ֮Linux ³£¼ûµÄÁù´óIPC ͨÐÅ·½Ê½£¨¶þ£©

    ¸üÐÂʱ¼ä:2016Äê08ÔÂ26ÈÕ16ʱ26·Ö À´Ô´:ÀÖÓã²¥¿ÍC++ÅàѵѧԺ ä¯ÀÀ´ÎÊý:

    5¡¢ÏûÏ¢¶ÓÁÐ

        ÏûÏ¢¶ÓÁб£´æÔÚÄÚºËÖУ¬ÊÇÒ»¸öÓÉÏûÏ¢×é³ÉµÄÁ´±í¡£
       (1)´´½¨»ò·ÃÎÊÏûÏ¢¶ÓÁÐ
       int msgget(key_t key,int msgflg);
        (2)²Ù×÷ÏûÏ¢¶ÓÁÐ
           int msgsnd(int msqid,const void *msg,size_t nbytes,int msgflg);
        msgÖ¸ÏòµÄ½á¹¹Ì屨ÐëÒÔÒ»¸ölong int³ÉÔ±¿ªÍ·£¬×÷Ϊmsgrcv()µÄÏûÏ¢ÀàÐÍ£¬±ØÐë´óÓÚ0¡£nbytesÖ¸µÄÊÇmsgÖ¸Ïò½á¹¹ÌåµÄ´óС£¬µ«²»°üÀ¨long int²¿·ÖµÄ´óС
         ssize_t msgrcv(int msqid,void *msg,size_t nbytes,long msgtype,int msgflg);
        Èç¹ûmsgtypeÊÇ0£¬¾Í·µ»ØÏûÏ¢¶ÓÁÐÖеĵÚÒ»¸öÏûÏ¢;Èç¹ûÊÇÕýÕûÊý£¬¾Í·µ»Ø¶ÓÁÐÖеĵÚÒ»¸ö¸ÃÀàÐ͵ÄÏûÏ¢;Èç¹ûÊǸºÊý£¬¾Í·µ»Ø¶ÓÁÐÖоßÓÐ×îСֵµÄµÚÒ»¸öÏûÏ¢£¬²¢ÇÒ¸Ã×îСֵҪСÓÚµÈÓÚmsgtypeµÄ¾ø¶ÔÖµ¡£
        (3)¿ØÖÆÏûÏ¢¶ÓÁÐ
          int msgctl(int msqid,int cmd,struct msqid_ds *buf);
          struct msqid_ds{
               struct ipc_perm msg_perm;
                  …
               };

    6¡¢Socket

    Ì×½Ó×Ö(Socket)ÊÇÓÉBerkeleyÔÚBSDϵͳÖÐÒýÈëµÄÒ»ÖÖ»ùÓÚÁ¬½ÓµÄIPC£¬ÊǶÔÍøÂç½Ó¿Ú(Ó²¼þ)ºÍÍøÂçЭÒé(Èí¼þ)µÄ³éÏó¡£Ëü¼È½â¾öÁËÎÞÃû¹ÜµÀÖ»ÄÜÔÚÏà¹Ø½ø³Ì¼äµ¥ÏòͨÐŵÄÎÊÌ⣬ÓÖ½â¾öÁËÍøÂçÉϲ»Í¬Ö÷»úÖ®¼äÎÞ·¨Í¨ÐŵÄÎÊÌâ¡£
    ¡¡¡¡Ì×½Ó×ÖÓÐÈý¸öÊôÐÔ:Óò(domain)¡¢ÀàÐÍ(type)ºÍЭÒé(protocol)£¬¶ÔÓ¦ÓÚ²»Í¬µÄÓò£¬Ì×½Ó×Ö»¹ÓÐÒ»¸öµØÖ·(address)À´×÷ΪËüµÄÃû×Ö¡£
     
    ¡¡¡¡Óò(domain)Ö¸¶¨ÁËÌ×½Ó×ÖͨÐÅËùÓõ½µÄЭÒé×壬×î³£ÓõÄÓòÊÇAF_INET£¬´ú±íÍøÂçÌ×½Ó×Ö£¬µ×²ãЭÒéÊÇIPЭÒé¡£¶ÔÓÚÍøÂçÌ×½Ó×Ö£¬ÓÉÓÚ·þÎñÆ÷¶ËÓпÉÄÜ»áÌṩ¶àÖÖ·þÎñ£¬¿Í»§¶ËÐèҪʹÓÃIP¶Ë¿ÚºÅÀ´Ö¸¶¨Ìض¨µÄ·þÎñ¡£AF_UNIX´ú±í±¾µØÌ×½Ó×Ö£¬Ê¹ÓÃUnix/LinuxÎļþϵͳʵÏÖ¡£
    ¡¡¡¡IPЭÒéÌṩÁËÁ½ÖÖͨÐÅÊÖ¶Î:Á÷(streams)ºÍÊý¾Ý±¨(datagrams)£¬¶ÔÓ¦µÄÌ×½Ó×ÖÀàÐÍ(type)·Ö±ðΪÁ÷ʽÌ×½Ó×ÖºÍÊý¾Ý±¨Ì×½Ó×Ö¡£Á÷ʽÌ×½Ó×Ö(SOCK_STREAM)ÓÃÓÚÌá¹©ÃæÏòÁ¬½Ó¡¢¿É¿¿µÄÊý¾Ý´«Êä·þÎñ¡£¸Ã·þÎñ±£Ö¤Êý¾ÝÄܹ»ÊµÏÖÎÞ²î´í¡¢ÎÞÖØ¸´·¢ËÍ£¬²¢°´Ë³Ðò½ÓÊÕ¡£Á÷ʽÌ×½Ó×ÖʹÓÃTCPЭÒé¡£Êý¾Ý±¨Ì×½Ó×Ö(SOCK_DGRAM)ÌṩÁËÒ»ÖÖÎÞÁ¬½ÓµÄ·þÎñ¡£¸Ã·þÎñ²¢²»Äܱ£Ö¤Êý¾Ý´«ÊäµÄ¿É¿¿ÐÔ£¬Êý¾ÝÓпÉÄÜÔÚ´«Êä¹ý³ÌÖжªÊ§»ò³öÏÖÊý¾ÝÖØ¸´£¬ÇÒÎÞ·¨±£Ö¤Ë³ÐòµØ½ÓÊÕµ½Êý¾Ý¡£Êý¾Ý±¨Ì×½Ó×ÖʹÓÃUDPЭÒé¡£
    ¡¡¡¡Ò»ÖÖÀàÐ͵ÄÌ×½Ó×Ö¿ÉÄÜ¿ÉÒÔʹÓöàÓÚÒ»ÖÖµÄЭÒéÀ´ÊµÏÖ£¬Ì×½Ó×ÖµÄЭÒé(protocol)ÊôÐÔÓÃÓÚÖ¸¶¨Ò»ÖÖÌØ¶¨µÄЭÒé¡£
    ¡¡¡¡(1) ´´½¨Ì×½Ó×Ö
    int socket(int domain,int type,int protocol);
    ¡¡¡¡¶ÔÓÚSOCK_STREAMºÍSOCK_DGRAM¶øÑÔ£¬·Ö±ðÖ»ÓÐÒ»ÖÖЭÒéÖ§³ÖÕâÖÖÀàÐ͵ÄÌ×½Ó×Ö¡£Òò´Ëprotocol¿ÉÒÔΪ0£¬±íʾĬÈϵÄЭÒé¡£
    ¡¡¡¡(2) °ó¶¨Ì×½Ó×Ö
     
    int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);//½«ÎÞÃûÌ×½Ó×ÖsockfdÓëaddr°ó¶¨(bind)
    ¡¡¡¡(3) ¼àÌýÌ×½Ó×Ö
     
    int listen(int sockfd,int backlog);//backlogÏÞ¶¨Á˵ȴý·þÎñµÄ¶ÓÁеÄ×î´ó³¤¶È
    ¡¡¡¡(4) µÈ´ý½ÓÊÜÁ¬½Ó
     
    int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
    ¡¡¡¡µ±¿Í»§¶Ë³ÌÐò³¢ÊÔÁ¬½ÓsockfdÌ×½Ó×Öʱ£¬accept·µ»ØÒ»¸öеÄÌ×½Ó×ÖÓë¿Í»§¶Ë½øÐÐͨÐÅ¡£Èç¹ûaddr²»ÊÇNULL£¬ÄÇô¿Í»§¶ËµÄµØÖ·½«»á±£´æÔÚaddrËùÖ¸ÏòµÄ½á¹¹ÌåÖУ»µ÷ÓÃaccept()ǰ±ØÐëÏȽ«addrlen³õʼ»¯ÎªaddrËùÖ¸Ïò½á¹¹ÌåµÄ´óС£¬accept()·µ»ØÒÔºó,addrlen½«»á±»ÉèÖóɿͻ§¶ËÌ×½Ó×ÖµØÖ·½á¹¹ÌåµÄʵ¼Ê´óС¡£È»ºó£¬Í¨¹ý¶Ôaccept()·µ»ØµÄÌ×½Ó×ÖÖ´ÐÐread()ºÍwrite()²Ù×÷¼´¿ÉʵÏÖÓë¿Í»§¶ËµÄ¼òµ¥µÄͨÐÅ¡£
    ¡¡¡¡(5) ½¨Á¢Á¬½Ó(¿Í»§¶Ë)
    ? int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
    ¡¡¡¡connect()ÔÚÎÞÃûÌ×½Ó×ÖsockfdºÍaddrÖ®¼ä½¨Á¢Á¬½Ó¡£addrÖ¸ÏòµÄ½á¹¹ÌåÖпÉÒÔ°üº¬·þÎñÆ÷µÄIPµØÖ·ºÍ¶Ë¿ÚºÅµÈÐÅÏ¢¡£
    ¡¡¡¡(6) Êý¾Ý´«Êä
    ssize_t send(int sockfd,const void *buf,size_t len,int flags);
    ssize_t recv(int sockfd, void *buf, size_t len,int flags);
    ¡¡¡¡(7) ¹Ø±ÕÌ×½Ó×Ö
     
    int close(int fd);
    ¡¡¡¡(8) Ö÷»ú×Ö½ÚÐòºÍÍøÂç×Ö½ÚÐòµÄת»»
    #include <netinet/in.h>
    unsigned long int htonl(unsigned long int hostlong);  //host to network,long
    unsigned short int htons(unsigned short int hostshort);
    unsigned long  int ntohl(unsigned long int netlong);
    unsigned short int ntohs(unsigned short int netshort);
    longÐͺ¯ÊýÓÃÀ´×ª»»sockaddr_in.in_addr.s_addr£»shortÐͺ¯ÊýÓÃÀ´×ª»»sockaddr_in.sin_port¡£
     
    ½ñÌìµÄ½²½â¾Íµ½ÕâÀïÁË£¬ÏëÒªÁ˽â»òÕßѧϰ¸ü¶à¡¢¸üÏêϸµÄÄÚÈÝ£¬»¶Ó­À´µ½ÎÒÃÇÀÖÓã²¥¿ÍC/C++Åàѵר¼Ò(http://www.itcast.cn/c/)À´×Éѯ¡¢Ñ§Ï°¡£

     ±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍC++ÅàѵѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
    ×÷ÕߣºÀÖÓã²¥¿ÍC/C++ÅàѵѧԺ
    Ê×·¢£ºhttp://www.itcast.cn/c/ 
    0 ·ÖÏíµ½£º
    ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
    ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿