当前位置:  技术问答>linux和unix

跪求Linux环境下进程间通信的例子

    来源: 互联网  发布时间:2016-03-21

    本文导语:  大家好,小弟最近很想去学习一下linux环境下的进程间通信方面的编程知识,想找个实例练习一下,希望有这方面开发经验的高手们能给点建议,或者能给出一些相关的实例的网站也行,小弟想通过动手编写几个实例...

大家好,小弟最近很想去学习一下linux环境下的进程间通信方面的编程知识,想找个实例练习一下,希望有这方面开发经验的高手们能给点建议,或者能给出一些相关的实例的网站也行,小弟想通过动手编写几个实例来练习一下。

|
这样的例子很多,baidu一下就可以了
我以前学这块的时候是看的linux网络编程,下边的地址可以下载
http://www.programsalon.com/downloads10/sourcecode/unix_linux/detail37040.html

|
一.面向连接的Socket实例 
  代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。 
  该服务器软件代码如下: 
#include   #include
#include   #include
#include   #include
#include  
#include  
#include  
#include  
#include  
#define SERVPORT 3333 /*服务器监听端口号 */ 
#define BACKLOG 10 /* 最大同时连接请求数 */ 
main() 

  int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ 
 struct sockaddr_in my_addr; /* 本机地址信息 */ 
 struct sockaddr_in remote_addr; /* 客户端地址信息 */ 
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) 

  perror("socket创建出错!"); exit(1); 

  my_addr.sin_family=AF_INET; 
 my_addr.sin_port=htons(SERVPORT); 
 my_addr.sin_addr.s_addr = INADDR_ANY; 
  bzero(&(my_addr.sin_zero),8); 
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))  
   == -1) { 
perror("bind出错!"); 
exit(1); 

 if (listen(sockfd, BACKLOG) == -1) { 
perror("listen出错!"); 
exit(1); 

while(1) { 
  sin_size = sizeof(struct sockaddr_in); 
  if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr,  
  &sin_size)) == -1) { 
perror("accept出错"); 
continue; 

  printf("received a connection from %sn", inet_ntoa(remote_addr.sin_addr)); 
  if (!fork()) { /* 子进程代码段 */ 
   if (send(client_fd, "Hello, you are connected!n", 26, 0) == -1) 
   perror("send出错!"); 
close(client_fd); 
exit(0); 

  close(client_fd); 
  } 
 } 

  服务器的工作流程是这样的:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的socket上监听,当accpet接收到一个连接服务请求时,将生成一个新的socket。服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串"Hello,you are connected!"。最后关闭该socket。 
  代码实例中的fork()函数生成一个子进程来处理数据传输部分,fork()语句对于子进程返回的值为0。所以包含fork函数的if语句是子进程代码部分,它与if语句后面的父进程代码部分是并发执行的。 
服务器端程序的编译
gcc -o con_server con_server.c
客户端程序的编译
gcc -o multi_times_client multi_times_client.c
服务器程序和客户端程应当分别运行在2台计算机上.
服务器端程序的运行,在一个计算机的终端执行
./con_server
客户端程序的运行,在另一个计算机的终端中执行
./multi_times_client 运行服务器程序的计算机的IP地址
在实际编程和测试中,可以用2个终端代替2个计算机,这样就可以在一台计算机上测试网络程序,
服务器端程序的运行,在一个终端执行
./con_server
客户端程序的运行,在另一个终端中执行
./multi_times_client 127.0.0.1
说明: 任何计算机都可以通过127.0.0.1访问自己. 也可以用计算机的实际IP地址代替127.0.0.1
客户端程序代码如下: 
#include 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#define SERVPORT 3333 
#define MAXDATASIZE 100 /*每次最大数据传输量 */ 
main(int argc, char *argv[]){ 
 int sockfd, recvbytes; 
 char buf[MAXDATASIZE]; 
 struct hostent *host; 
 struct sockaddr_in serv_addr; 
 if (argc h_addr); 
 bzero(&(serv_addr.sin_zero),8); 
 if (connect(sockfd, (struct sockaddr *)&serv_addr,  
   sizeof(struct sockaddr)) == -1) { 
perror("connect出错!"); 
exit(1); 

 if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) { 
perror("recv出错!"); 
exit(1); 

 buf[recvbytes] = ''; 
 printf("Received: %s",buf); 
 close(sockfd); 

  客户端程序首先通过服务器域名获得服务器的IP地址,然后创建一个socket,调用connect函数与服务器建立连接,连接成功之后接收从服务器发送过来的数据,最后关闭socket。 

|
1:建立两个进程,每个进程建立一个消息队列
2:然后一个进程向另一个进程的消息队列发送消息,他们之间就可以通信了
3:消息可以包括要发送内容的地址,然后在接受方释放就可以了

|
建议看 unix网络编程,到网上下一个,到处都是....

|
linux环境下的进程间通信有管道,命名管道,共享内存,映射文件,套接字(socket)其中socket编程是最为经典,实用于网络,下面给你个socket的小例子。

    
 
 

您可能感兴趣的文章:

  • linux僵尸(zombie)进程介绍及清除
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • linux下进程占用内存空间详解
  • linux命令如何实现重启父进程而不会使其子进程退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • Linux中最多同时可以开多少个进程,一个进程可以开多少个线程?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • Linux守护进程 的子进程 终端处理
  • Linux内核进程与应用进程的通信方式有哪些?
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)?
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息?
  • 如何linux下监控进程及其子进程占用资源?
  • linux下的进程如何访问另外一个进程建立的mutex?
  • linux中用killall命令杀死进程的时候会释放掉该进程所占有的内存吗?
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 请教:在Linux下怎么样检测一个进程是否是僵尸进程??
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • Linux下请教一个父进程杀死子进程的问题.
  • 怎么查看Linux中所运行的进程,并且知道哪些是停止响应的,用什么命令可以杀掉停止响应的进程?
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 如何编译Linux Device Driver中的例子
  • 哪里可以找到linux下的TCP/UDP/IP编程教程和例子?
  • 给点linux下的c程序的简单例子
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • 关于linux设备驱动的第一个例子
  • 谁有完整的java在linux下读excel的完整下载包URL,例子,文档,很急!!!!多少分都行
  • 谁能给一个linux/unix下多线程同步的例子
  • 求个linux多线程编程的例子,要有线程池的 通用些更好
  • 我想学c/s模式的linux网络编程,那位同志可以推荐一下几个成功例子呢?谢谢!
  • 求linux开机自动运行用户程序脚本例子!在线等
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 想设计几个简单的通信程序,在linux环境下编译通信,怎么实现?
  • linux驱动程序是怎样通过内核和应用程序通信,还有是怎样和硬件通信,跪求求解,谢谢高手留言。
  • 嵌入式linux下线程通信可以用共享文件法吗?
  • linux与Windows socket通信,乱码
  • Linux上SERVER 和vc上CLIENT的通信connect失败!
  • linux如何和hid类设备通信
  • linux进程异步通信,高手请进
  • Linux网络编程(怎样实现两个客户端之间的通信)
  • linux 与windows 间socket通信问题
  • LINUX下局域网通信的问题
  • 深入了解Linux系统TCP通信的高手请帮帮忙:Linux通信问题.分不够再加
  • 求救!!!嵌入式Linux 串口通信
  • Linux下的网络通信架构 cwinux
  • linux 下使用 sendmsg 函数 udp 通信问题???
  • linux下追求性能的通信服务器,应该用什么技术?
  • [100]求答案,关于虚拟机linux和WIN2K通信的问题???
  • linux通信问题
  • linux 与windows进程间通信的区别??
  • linux C语言 TCP 通信
  • linux客户端程序能否和windows端的服务器程序进行socket通信?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3