linux中fifo管道

linux中fifo管道,第1张

这是OS/2 *** 作系统下的一个系统调用.

原型如下:

DosCreateNPipe (PSZ pszName, PHPIPE pHpipe, ULONG openmode,

ULONG pipemode, ULONG cbOutbuf, ULONG cbInbuf, ULONG msec)

pszName

管道的名字

pHpipe

管道句柄

openmode

一组标志,定义了打开管道时的模式。

pipemode

一组标志,定义了管道的模式。

cbOutbuf和 cbInbuf

出入buf

msec

等待有名管道实例变为可用时等待的最长时间,单位是毫秒。

"\\pipe\\gtemp"是创建的命名管道的对象名字,像在Windows2000内核里边,命名管道是一种内核对象,所有的内核对象都由对象管理器来管理,而且是一种树状的,就像文件夹那样一层一层的,在Windows下在Softice里输入objdir就可以查看内核对象。

你创建一个NamedPipe,当然要放在\pipe下边了

至于为什么用"\\",你应该知道C语言里边"\"是转义符啊,前一个\是转义符,这是基本的C语言常识了

就像在Windows下用CreateFile新建一个文件,文件名要写"C:\\xxx\\yyy\\newfile.txt"这样

还有HPIPE,这是管道句柄,调用这个函数成功后,返回的管道句柄就放在hpipe里,以后就可以用这个句柄来读写这个命名管道了。

这个DosCreateNPipe类似于Windows下的CreateNamedPipe、Linux下的mkfifo

下边是CreateNamedPipe的原型,和DosCreateNPipe是比较像的,只不过返回的管道句柄放在返回值里:

HANDLE CreateNamedPipe(

LPCTSTR lpName,

DWORD dwOpenMode,

DWORD dwPipeMode,

DWORD nMaxInstances,

DWORD nOutBufferSize,

DWORD nInBufferSize,

DWORD nDefaultTimeOut,

LPSECURITY_ATTRIBUTES lpSecurityAttributes

)

在st_mode的特征位定义里有:

S_IFIFO 0010000 //先进先出(fifo)

fifo是管道文件,分为分为无名管道和有名管道。

无名管道例如:ls-l | grep name 使用管道可将一个命令的输出作为另一个命令的输入。命令执行时,无名管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。无名管道是临时的,执行完成后会自动消失。由于没有名字,无名管道只能用于亲缘关系的进程间通信.

有名管道即FIFO,在文件系统中有自己文件名路径名,这样即使两个不相关(没有亲缘关系)的进程,只要可以访问该路径,就能够彼此通过创建FIFO相互(经常性的而非临时的)通信。有名管道的名字存在于文件系统中,但内容还是存放在内存中。

S_IFIFO 即表示有名管道文件。具体介绍和应用,还请翻阅“进程间通信--管道”的相关内容。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存