本文目录一览:
- 1、应用程序之间互相通讯的几种方法
- 2、什么是linux管道,windows下有管道类似的东西吗?
- 3、在windows操作系统中进程通信的方式有哪些
- 4、Unix管道机制
- 5、windows窗口应用程序与后台进程怎么通信
应用程序之间互相通讯的几种方法
Mailslot由Server端创建,代码如下: myMailslot = CreateMailslot(pSlotName, 0, MAILSLOT_WAIT_FOREVER, NULL); 然后,Client端就可以像打开文件一样打开这个Mailslot,再通过API函数WriteFile()来将数据写入到消息队列中。 与此相类似,Pipe也是由Server端创建的,代码如下: pipe = CreateNamedPipe(pPipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE |PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE,BUFSIZE, 20000, NULL); 接着,Client端就可以通过一般的文件API读写数据,代码如下: pipe = CreateFile(pPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0,NULL); success = WriteFile(pipe, pMessage, strlen(pMessage) + 1, bytesWritten, NULL); Pipe分两种,即命名Pipe和匿名Pipe。匿名Pipe是以句柄而不是以名字来进行标识的,因而也就限制了它只能在同一台机器上通讯,而不能应用于网络。命名Pipe则提供了以名字来进行标识,所以能在网络上的其它任何地方打开它。需要注意的是:命名Pipe只能在 Win NT而不是Win 95上创建(即Server端),Client端则可以是任意平台。 Pipe既可以单向通讯也可以双向通讯,Mailslot则只能单向通讯。Client端可以发送消息给mailslot,但不能接收消息;如果你想要接收消息,则只能创建一个新的mailslot。但mailslot有一个很大的优点:它支持数据广播。也就是说,若Client端发送一条消息,则整个网络中的同名对象都能收到。这是因为mailslot的名字的作用域只是在本台机器上,所以可在不同机器上创建同名的mailslot,当Client端发来消息时则每一台机上的mailslot都得到了该消息的一份拷贝,并在本机上作出相应的反应。Mailslot的最大缺陷是不可靠,因为它的数据是以数据报格式来传送的,网络错误或负荷过重都会导致数据丢失。 Pipe则较为可靠,但它不能广播。所以,如果你不需要进行广播,则Pipe是更好的选择。选择Mailslot,则要对此后遇到的麻烦有充分的准备。 7、剪贴板(Clipboard) 大家对Windows的剪贴板应该不会感到陌生吧?它的出现就是为了实现应用程序间的互相数据交换。Windows提供了一系列的API函数来让应用程序安全地打开剪贴板,读写其中的数据。 剪贴板的缺陷也是显而易见的:当有新的数据放在剪贴板上时,则先前的数据就会被冲掉,而在Windows中用到剪贴板的时候又实在太多了,所以这种方式用于程序间的通讯显然不够安全。 8、COM和DCOM 公共对象模式(COM)是一种协议,它建立了一个软件模块同另一个软件模块之间的连接,然后将其描述出来。当这种连接建立起来之后,则两个模块之间就可以通过称为“接口”的机制来进行通讯。COM可以用不同的语言(VB、VC、Delphi)进行编制,又能被其它语言编写的程序所使用,并且不用管通讯双方实际所处的位置(是在同一台机上,还是在同一个网络上的不同机上)。事实上,Internet上有大量的COM控件可供人们下载使用,其中有相当一部分就是用于应用程序间的相互通讯(甚至是Internet程序间的通讯),硬盘上能够看到的大量的.ocx文件其实就是一种COM。 COM对象为外部调用提供了一个标准的界面,COM Client通过创建COM Server的一个实例获得指针,转向所需的函数定义处并执行相应的程序。讲得通俗一点,也就是先正确定义好COM对象的属性(Property),再执行相应的方法(Method)。 DCOM(分布式公共对象模式)是COM在网络上的一种扩展,它通过把分布式对象间的通讯变成一个实体来实现通讯。 COM如今被微软公司大力提倡,最著名的有OLE、ActiveX、DirectX和Win95、WinNT的外壳。由于微软公司目前在软件业处于霸主地位,所以COM很有可能成为将来的业界标准,其前途也较为看好。但COM的庞大也会使一些经验丰富的程序员望而却步,他们宁可自己多写一些代码以使整个程序更为简洁、有效而不愿使用COM。 以上介绍的只是现今流行的一些通讯方法,它们各有各的优缺点,没有哪一种是万能的。因此,只有在合适的场合采用合适的方案,才是最好的解决办法。
什么是linux管道,windows下有管道类似的东西吗?
管道是一种进程间通信机制,好比一个管子,一边一个口,一个往里放,另一头可以往出取,操作是双向的
windows也有这样的东西Pipe
在windows操作系统中进程通信的方式有哪些
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。-windowspipe通信
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。-windowspipe通信
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
Unix管道机制
管道是一种进程间的通信机制,Windows 和 Linux(以及 UNIX)上都使用的这种机制。 管道源自“贝尔实验室”开发的 UNIX ,并且所有的 UNIX 和 Linux 都继承了这项技术。 管道是通过通常的 IO 接口存取的字节流。创建管道后,通过使用操作系统的任何读或写 IO 系统调用来读或者写它。在 UNIX 和 Linux 环境中,IO 调用是 read() 和 write() 。 在 Windows 环境中,API 是 ReadFile() 和 WriteFile() 。Windows 管道与 Linux 管道的区别在于 Windows 使用单一句柄(类似于 Linux 文件描述符)支持双向 IO。Linux 管道返回两个文件描述符来实现双向 IO。 -windowspipe通信
管道(pipe)通信
主要用于大批量的信息传递,管道可用于同一用户的同祖先的进程间通信,而有名管道(FIFO管道)可用于不同用户进程间的通信。系统将管道文件作为通信的介质,构成两端进程传递信息的流水线。通常设定一个进程向管道中写信息,另一个进程从管道中读信息。-windowspipe通信
管道读写的特点:
(1)写操作
对管道写时,每次write调用操作的结果总是附加在管道的末端(而文件写可以通过调整指针随意进行);一次写入的字节数最好不要大于设定的系统常量PIPE_BUF;当设备处于忙状态时,write调用会被阻塞并被延迟执行。完成时将返回实际写入的字节数;当试图对一个没有被进程打开作为写的管道而进行write操作时,将生成SIGPIPE信号,并且系统公用变量errno的值被置为EPIPE,表示管道被破坏。-windowspipe通信
(2)读操作
所有的read调用总是从管道当前位置开始,即管道文件不支持搜索指针的移动;当管道中无信息时read系统调用被阻塞,但对空文件读时可返回空串并不发生阻塞;若管道未被其他进程以写方式打开,就对管道做read则返回0.-windowspipe通信
无名管道:由系统调用pipe创建,当pipe调用成功时将返回两个整形文件描述符filedes[0]和filedes[1],分别指向两个数据流。
传统unix系统命令创建的管道是单向的(半双工方式)此时数据传递的方向是单向的,即所创建的文件描述符一端只能用于读,另一端只能用于写,若需要双方数据传递时则需要建立两个管道文件。而现代unix中pipe系统调用可以返回两个全双工的文件描述符,即所建立的管道可同时用于读操作和写操作。若filedes[0]用来写,则filedes[1]用来读,若filedes[1]用来写,则filedes[0]用来读,而半双工时时固定的。-windowspipe通信
有名管道:本质上与无名管道在应用上是相同的,但有名管道具有一些其他的特点,如再有名管道生成时会在文件系统中生成一个目录表项,有了目录表项就有了文件访问权限的管理,就可以让其他进程对管道进行访问。有名管道可以在shell中创建也可以在程序中创建,创建有名管道的命令为:mknod-windowspipe通信
windows窗口应用程序与后台进程怎么通信
窗口也有进程啊,你没说清楚你的窗口和后台程序是否有关系,还是两个不同的程序,我只能介绍给你进程与进程间通信,可以用管道技术(pipe)实现。