利用C语言写一个程序实现两个进程间进行管道通信

利用C语言写一个程序实现两个进程间进行管道通信,第1张

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#define N 10

#define MAX 100

int child_read_pipe(int fd)

{

char buf[N]

int n = 0

while(1)

{

n = read(fd,buf,sizeof(buf))

buf[n] = '\贺者0'

printf("春拍汪Read %d bytes : %s.\n",n,buf)

if(strncmp(buf,"quit",4) == 0)

break

}

return 0

}

int father_write_pipe(int fd)

{

char buf[MAX] = {0}

while(1)

{

printf(">")

fgets(buf,sizeof(buf),stdin)

buf[strlen(buf)-1] = '\0'

write(fd,buf,strlen(buf))

usleep(500)

if(strncmp(buf,"quit",4) == 0)

break

}

return 0

}

int main()

{

int pid

int fd[2]

if(pipe(fd) <0)

{

perror("Fail to pipe")

exit(EXIT_FAILURE)

}

if((pid = fork()) <扒仔 0)

{

perror("Fail to fork")

exit(EXIT_FAILURE)

}else if(pid == 0){

close(fd[1])

child_read_pipe(fd[0])

}else{

close(fd[0])

father_write_pipe(fd[1])

}

exit(EXIT_SUCCESS)

}

http://www.coder8.cn/vbnet/20070926/249.html

这是个vb的,差不多。下面是部分代码

本文介绍如何利用VB.Net 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC(掌上电脑,简称:PPC)间的双向通信,并且通过当今流行的.net平台编程语言Visaul Basic.Net 2003编写PC端和PPC端程序实现两者的信息交换。

一、概述

如今移动计算设备越来越普及,而PPC与桌面电脑的数据交换更是其必不可少的功能。笔者根据实际的无线PPC开发认为,PPC程序与桌面程序进行通信,除了可以通过SQL Server CE提供的RDA(远程数据存取)和Replication(复制)来完成与桌面SQL Server的数据存取外,另外一种比较方便快捷的方法则是通过Socket与桌面电脑完成信息的交换。

采用Visaul Basic.Net 2003进行PPC和桌面电脑的程序编写,VB.NET已经完全不同于过去的VB,它的诸梁慧多新特性以及依托.Net平台强大的面向对象体系使VB.Net焕然一新,不仅编写桌面程序更加轻松快捷而且更可快速的、可视化的开发以Pocket PC为平台的智能设备程序。

.Net框架是一种新的计算平台,可以简单理吵液解为组件库或者类库橡碰答,类似于MFC和VCL,但是却比它们更加强大和易用。.NET框架具有两个主要组件:公共语言运行库和 .NET 框架类库。公共语言运行库是 .NET 框架的基础,可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理等)。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合,该类库是面向对象的,.NET 框架类库能够完成一系列常见编程任务,包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务。

.Net框架精简版是完整.Net框架的子集。它是对完整的 .Net框架进行精简后得到的版本,虽然其规模大大减小,但多数功能仍然保持完整。使用.NET框架精简版可以针对Pocket PC和其他Windows CE .NET设备进行开发和部署,提高开发人员的工作效率 VB.Net编译的桌面程序在目标机器上需要.Net框架的支持才能运行,而编译过的PPC程序需要在目标PPC上装载.Net框架精简版后方可运行。

二、设计思路

在.Net框架中System.Net.Sockets命名空间为需要严密控制网络访问的开发提供了 Windows Sockets (Winsock) 接口的托管实现,该命名空间中包含了与Socket相关的类、接口和枚举,主要包括实现 Berkeley 套接字接口的Socket类、用于 TCP 网络客户端侦听连接的TcpListener类、为 TCP 网络服务提供客户端连接的TcpClient类以及提供无连接的发送和接收用户数据文报 (UDP) 的网络服务等。该命名空间下的大部分类都受.Net框架精简版的支持,也就是说实现这些对象的代码完全可以在装载有.Net框架精简版的PPC上运行。

可以把PPC当作局域网中的一个终端来与桌面电脑连接,它们之间有多种物理连接方式,通常可以使用USB线缆配合ActiveSync直接与桌面电脑连接,当然,若PPC和桌面电脑同时具备其它的连接方式,比如无线WiFi(无线802.1x)、蓝牙等都可以组成相应的无线局域网络。

在PPC上编写客户端程序并实现TcpClient类,用于连接、发送和接收流数据。在桌面电脑上我们设计Socket服务端程序并实现TcpListener类和Socket类,用于侦听和接受传入连接的请求。Socket类为网络通信提供了一套非常丰富的方法和属性,服务程序可以使用 TcpListener.Listen 方法侦听连接。Accept 方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的Socket,如果当前使用的是无连接协议(如UDP),则根本不需要侦听连接。实际上TcpClient类和TcpListener类为 Socket通信提供了比Socket类更简单、对用户更友好的接口,如果编写较简单的应用程序,而且只需同步数据传输,则可以考虑使用 TcpClient、TcpListener 和 UdpClient。

……

Listener = New TcpListener(System.Net.IPAddress.Parse("192.200.0.100"),"10200")

Listener.Start()

Label1.Text = "正在 192.200.0.100:10200 处侦听....."

……

三、程序的具体实现

1、创建PPC客户端程序

启动Visual Studio .Net 2003,新建Visaul Basic项目,并选择“智能设备应用程序”,选择“Pocket PC”平台的“Windows 应用程序”并创建项目。Pocket PC平台是Windows CE 平台的子集,Windows CE系统的应用则更加广泛。项目创建完后,Visaul Studio.Net会创建一个默认的主窗体Form1,在窗体上分别放置两个Panel控件、四个Label控件、三个TextBox控件和两个Button控件。

PPC客户端程序界面

设计PPC程序的Form窗体与桌面程序没有太多差别,只是少了一些PPC上所不支持的属性,但是属性的名称并没有变化。在PPC上没有窗口最小化的实际意义,所以主窗体的MinimizeBox属性必须设置成False,否则,当需要退出程序点击标题栏最右侧的关闭按钮时,程序并没有真正退出而是隐藏在后台,程序需要重新激活才能回到前台。或者可以向一个Button添加关闭主窗体的代码:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Me.Close()

End Sub

Me 为VB.Net中的关键字,可以引用当前在其中执行代码的类或结构的特定实例。Me 的行为与引用当前实例的对象变量或结构变量类似。此例Me代表主窗体的实例Form1。使用TcpClient向TcpListener或Socket 侦听器连接并交换数据,可以使用下面两种方法之一连接到侦听器:

(1)创建一个 TcpClient,并调用三个可用的 Connect 方法之一。

(2)使用远程主机的主机名和端口号创建 TcpClient。此构造函数将自动尝试一个连接。

TcpClient的Connect 方法使用指定的主机名和端口号将客户端连接到 TCP 主机,重载函数原型为:

使用指定的远程网络终结点将客户端连接到远程 TCP 主机。

Overloads Public Sub Connect(IPEndPoint)

使用指定的 IP 地址和端口号将客户端连接到 TCP 主机。

Overloads Public Sub Connect(IPAddress, Integer)

将客户端连接到指定主机上的指定端口。

Overloads Public Sub Connect(String, Integer)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12242949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存