c/c++ unix ipc

一个例子
  1. //c_unix.c
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/un.h>
  6. #define UNIX_DOMAIN "/tmp/UNIX.domain"
  7. int main(void)
  8. {
  9. int connect_fd;
  10. int ret;
  11. char snd_buf[1024];
  12. int i;
  13. static struct sockaddr_un srv_addr;
  14. //creat unix socket
  15. connect_fd=socket(PF_UNIX,SOCK_STREAM,0);
  16. if(connect_fd<0)
  17. {
  18. perror("cannot create communication socket");
  19. return 1;
  20. }
  21. srv_addr.sun_family=AF_UNIX;
  22. strcpy(srv_addr.sun_path,UNIX_DOMAIN);
  23. //connect server
  24. ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
  25. if(ret==-1)
  26. {
  27. perror("cannot connect to the server");
  28. close(connect_fd);
  29. return 1;
  30. }
  31. memset(snd_buf,0,1024);
  32. strcpy(snd_buf,"message from client");
  33. //send info server
  34. for(i=0;i<4;i++)
  35. write(connect_fd,snd_buf,sizeof(snd_buf));
  36. close(connect_fd);
  37. return 0;
  38. }
 
  1. //s_unix.c
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/un.h>
  6. #define UNIX_DOMAIN "/tmp/UNIX.domain"
  7. int main(void)
  8. {
  9. socklen_t clt_addr_len;
  10. int listen_fd;
  11. int com_fd;
  12. int ret;
  13. int i;
  14. static char recv_buf[1024];
  15. int len;
  16. struct sockaddr_un clt_addr;
  17. struct sockaddr_un srv_addr;
  18. listen_fd=socket(PF_UNIX,SOCK_STREAM,0);
  19. if(listen_fd<0)
  20. {
  21. perror("cannot create communication socket");
  22. return 1;
  23. }
  24. //set server addr_param
  25. srv_addr.sun_family=AF_UNIX;
  26. strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);
  27. unlink(UNIX_DOMAIN);
  28. //bind sockfd & addr
  29. ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
  30. if(ret==-1)
  31. {
  32. perror("cannot bind server socket");
  33. close(listen_fd);
  34. unlink(UNIX_DOMAIN);
  35. return 1;
  36. }
  37. //listen sockfd
  38. ret=listen(listen_fd,1);
  39. if(ret==-1)
  40. {
  41. perror("cannot listen the client connect request");
  42. close(listen_fd);
  43. unlink(UNIX_DOMAIN);
  44. return 1;
  45. }
  46. //have connect request use accept
  47. len=sizeof(clt_addr);
  48. com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);
  49. if(com_fd<0)
  50. {
  51. perror("cannot accept client connect request");
  52. close(listen_fd);
  53. unlink(UNIX_DOMAIN);
  54. return 1;
  55. }
  56. //read and printf sent client info
  57. printf("/n=====info=====/n");
  58. for(i=0;i<4;i++)
  59. {
  60. memset(recv_buf,0,1024);
  61. int num=read(com_fd,recv_buf,sizeof(recv_buf));
  62. printf("Message from client (%d)) :%s/n",num,recv_buf);
  63. }
  64. close(com_fd);
  65. close(listen_fd);
  66. unlink(UNIX_DOMAIN);
  67. return 0;
  68. }

c/c++ unix ipc的更多相关文章

  1. 进程通信类型 管道是Linux支持的最初Unix IPC形式之一

    管道 Linux环境进程间通信(一) https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/index.html 管道及有名管道 郑彦兴200 ...

  2. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  3. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  4. 进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道

    管道 Linux环境进程间通信(一) https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/index.html 管道及有名管道 郑彦兴200 ...

  5. Unix IPC之Posix消息队列(1)

    部分参考:http://www.cnblogs.com/Anker/archive/2013/01/04/2843832.html IPC对象的持续性:http://book.51cto.com/ar ...

  6. UNIX IPC: POSIX 消息队列 与 信号

    POSIX消息队列可以注册空队列有消息到达时所触发的信号,而信号触发对应的信号处理函数. 下面是一份基本的消息队列和信号处理结合的代码(修改自UNIX网络编程:进程间通信) #include < ...

  7. Unix IPC之基于共享内存的计数器

    目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数, ...

  8. Unix IPC之共享内存区(1)

    1 共享内存区 共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步 ...

  9. Unix IPC之读写锁

    linux中读写锁的rwlock介绍 读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁: 1,当读写锁是写加锁状态时, 在这个锁被解锁之前, 所 ...

随机推荐

  1. POJ Octal Fractions(JAVA水过)

    题目链接:id=1131" target="_blank">CLICK HERE~ 尽管java一下模拟水过,可是我看到别人的一段奇妙代码,贴出和大家共享. imp ...

  2. HDU ACM 1066 Last non-zero Digit in N!

    #include<iostream> using namespace std; int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2}; ...

  3. cocos2d-实现读取.plist文件(使用数组CCArray)

    学习札记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray) <?xml version="1.0" encoding="UTF-8&q ...

  4. Winform TabControl控件使用

    运行效果: 代码: /// <summary> /// 添加选项卡 /// </summary> /// <param name="sender"&g ...

  5. Http方式获取网络数据

    通过以下代码可以根据网址获取网页的html数据,安卓中获取网络数据的时候会用到,而且会用Java中的sax方式解析获取到数据.(sax解析主要是解析xml)具体代码如下: package com.wy ...

  6. vim打开文件时显示行号

    vim打开文件是,默认不提示行号. 至于显示行号的用途,因人而异 linux下一个主机可能有N个账户.对于配置分为两种:仅配置当前账户,配置所有账户 vim配置文件路径(Centos  5.5 fin ...

  7. Arcgis镶嵌数据集java代码操作

    转自:http://www.cdtarena.com/javapx/201307/9105.html 镶嵌数据集结合了之前arcgis管理影像的栅格目录和栅格数据集,为解决海量影像管理提供了很好的方案 ...

  8. Solr部署详解

    Solr部署详解 时间:2013-11-24 方式:转载 目录 1 solr概述 1.1 solr的简介 1.2 solr的特点 2 Solr安装 2.1 安装JDK 2.2 安装Tomcat 2.3 ...

  9. 基于visual Studio2013解决C语言竞赛题之1002字符打印

        题目 解决代码及点评 /************************************************************************/ /* ...

  10. Swift - iOS中各种视图控制器(View Controller)的介绍

    在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...