- 浏览: 1263651 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
shell之有名管道FIFO
1. 什么是有名管道?
有名管道是一个能在互不相关进程之间传送数据的特殊文件。一个或多个进程向内写入数据,在另一端由一个进程负责读出。有名管道是在文件系统中可见的,也就是说ls可以直接看到。(有名管道又称FIFO,也就是先入先出。)
有名管道可以将无关的进程联系起来,而无名的普通管道一般只能将父子进程联系起来——除非你很努力地去尝试——当然也能联系两个无关进程。有名管道是严格单向的,尽管在一些系统中无名管道是双向的。
2. 我如何建立一个有名管道?
在shell下交互地建立一个有名管道,你可以用mknod或mkfifo命令。在有些系统中,mknod产生的文件可能在/etc目录下,也就是说,可能不在你的目录下出现,所以请查看你系统中的man手册。[译者注:在Linux下,可以看一下fifo(4)]
要在程序中建立一个有名管道:
/* 明确设置umask,因为你不知道谁会读写管道 */ umask(0); if (mkfifo("test_fifo", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) { perror("mkfifo"); exit(1); }
也可以使用mknod。[译者注:在Linux下不推荐使用mknod,因为其中有许多臭虫在NFS下工作更要小心,能使用mkfifo就不要用mknod,因为mkfifo()是POSIX.1 标准。]
/* 明确设置umask,因为你不知道谁会读写管道 */ umask(0); if (mknod("test_fifo", S_IFIFO | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, 0)) { perror("mknod"); exit(1); }
3. 我如何使用一个有名管道?
使用有名管道十分简单:你如同使用一个普通文件一样打开它,用read()和 write()进行操作。但对管道使用open()时可能引起阻塞,下面一些常用规律可以参考。
-
如果你同时用读写方式(O_RDWR)方式打开,则不会引起阻塞。
-
如果你用只读方式(O_RDONLY)方式打开,则open()会阻塞一直到有写方打开管道, 除非你指定了O_NONBLOCK,来保证打开成功。
-
同样以写方式(O_WRONLY)打开也会阻塞到有读方打开管道,不同的是如果 O_NONBLOCK被指定open()会以失败告终。
当对有名管道进行读写的时,注意点和操作普通管道和套接字时一样:当写入方关闭连接时read()返回EOF,如果没有听众write()会得到一个SIGPIPE的信号,对此信号进行屏蔽或忽略会引发一个EPIPE错误退出。
5. 能否让多个进程同时向有名管道内写入数据?
如果每次写入的数据少于PIPE_BUF的大小,那么就不会出现数据交叉的情况。但由于对写入的多少没有限制,而read()操作会读取尽可能多的数据,因此你不能知道数据到底是谁写入的。
PIPE_BUF的大小根据POSIX标准不能小于512,一些系统里在中被定义,[译者注:Linux中不是,其值是4096。]这可以通过pathconf()或fpathconf() 对单独管道进行咨询得到。
6. 有名管道的应用
“我如何时间服务器 和多个客户端的双向交流?”
一对多的形式经常出现,只要每次客户端向服务器发出的指令小于PIPE_BUF,它们就可以通过一个有名管道向服务器发送数据。客户端可以很容易地知道服务器传发数据的管道名。
但问题在于,服务器不能用一个管道来和所有客户打交道。如果不止一个客户在读一个管道,是无法确保每个客户都得到自己对应的回复。
一个办法就是每个客户在向服务器发送信息前都建立自己的读入管道,或让服务器在得到数据后建立管道。使用客户的进程号(pid)作为管道名是一种常用的方法。客户可以先把自己的进程号告诉服务器,然后到那个以自己进程号命名的管道中读取回复。
发表评论
-
centos7 更改gitlab 仓库位置
2018-07-05 14:53 2046... -
linux iptables ssh 相关配置
2015-12-30 10:04 1796Iptables配置 (1)查看本机关于IPTABLES的 ... -
让CentOS启用EPEL的软件库
2015-09-01 15:06 0... -
linux防火墙iptables的几个操作
2015-05-12 13:13 7711开放某个端口 修改/etc/ ... -
关于Linux的Ulimit参数
2014-12-22 12:13 1306JVM 64位平台与32位平台 ... -
一种文件完整性校验的方法
2014-12-18 17:49 3719通常,运维人员会在系统上安装杀毒软件, ... -
SSH命令传输文件
2014-08-14 10:40 1272linux 通过SSH传输文件 scp -rp /p ... -
实用shell脚本备份2
2014-05-21 14:27 988#!/bin/bash #chkconfig: 5 80 ... -
实用shell脚本备份
2014-05-21 14:09 1205#!/bin/bash #chkconfig: 5 80 ... -
./configure报configure: error: C++ preprocessor "/lib/cpp" fails sanity check
2014-03-17 15:40 4577centos6.1 在安装tripwire的时候 报了个错 ... -
shell 实现java程序的start,stop,restart,status
2014-02-25 17:47 8221#!/bin/bash #chkconfig: 5 80 ... -
redhat修改了rc.local 后linux起不来了
2014-02-25 16:13 1981本来想让程序自动运行的,可是在 redhat修改了 ... -
linux 下查看机器是cpu是几核的
2013-10-29 11:25 1455linux 下查看机器是cpu是几核的 几个cpu ... -
CentOS 5 LVM
2013-03-19 09:22 934Linux 2.6以上内核支持ext3的在线扩容第一种情况: ... -
centos5.6安装ora10g
2013-03-19 09:15 1051下载附件 -
CentOS5.2安装配置DNS服务器
2013-03-19 09:11 1165标题:CentOS5.2安装配置DNS服务器 出处:天空极 ... -
linux smb 服务配置.txt
2013-03-19 09:10 1563一.samba服务器介绍: * samba服务 ... -
centos 5.5 上安装svn+apache+apr
2012-05-29 12:25 2000在centos5.5下面安装 svn+apache实现 ... -
vsftpd 500 OOPS: cannot change directory:/root
2012-04-12 17:04 1654vsftpd 500 OOPS: cannot chang ... -
centos vsftpd
2011-09-05 13:25 1265在这里介绍一下vsftp的安装与配置方式: 1、安装vsft ...
相关推荐
【进程间通信】是操作系统中进程协作和交互的重要机制,主要分为无名管道(Pipe)和有名管道(FIFO)两种类型。本章讲解了这两类管道的原理和使用方法,以及信号(Signal)的处理机制。 **无名管道(Pipe)**是一种半双工的...
- **有名管道(FIFO)**:可以用于任意进程之间的通信,具有持久性,即使创建它的进程退出后,FIFO文件仍然存在。 通过以上知识点的学习,不仅能够加深对进程概念的理解,还能够掌握在Linux系统下如何利用管道进行...
有名管道(FIFO)是进程间通信(IPC)的一种方式,它允许两个不相关联的进程共享数据流。在Linux中,可以使用mkfifo命令创建有名管道,并通过读写操作实现进程间的通信。 进程控制是操作系统的核心功能之一,涉及...
还涵盖了文件描述符、管道、重定向、有名管道(FIFO)和套接字等高级I/O概念。 4. **进程管理**:涵盖了进程的创建、等待、信号处理、进程间通信(IPC)等主题,包括信号量、消息队列和共享内存等机制。 5. **网络...
**2.10 有名管道(FIFO)能做什么?** - **2.10.1 什么是有名管道?** - 有名管道是一种特殊的文件,可以用于不同进程之间的通信,它存在于文件系统中。 - **2.10.2 我如何建立一个有名管道?** - 使用`mkfifo()`...
**2.10 有名管道(FIFO)的作用** - **2.10.1 什么是有名管道** 有名管道是一种特殊的文件类型,用于不同进程之间的通信。与匿名管道不同,有名管道存在于文件系统中,并且有一个明确的路径名。 - **2.10.2 如何...
10. 进程间通信(IPC)机制:UNIX系统中的IPC机制主要包括管道(Pipe)、有名管道(FIFO)、消息队列、信号量和共享内存。 11. C语言创建子进程与等待子进程:在C语言编程中,父进程通过`fork()`函数创建子进程,...
**2.10 有名管道(FIFO)的功能:** - **2.10.1 什么是有名管道:** - 有名管道是一种特殊的文件,存在于文件系统中,可以在没有直接血缘关系的进程间提供通信。 - **2.10.2 如何建立一个有名管道:** - 使用`...
2. 有名管道(FIFO):与管道类似,但允许不相关的进程间通信。 3. 信号量(Semaphore):用于解决多进程间的同步问题,防止资源竞争。 4. 共享内存:允许多个进程共享同一块内存区域,快速高效。 5. 消息队列:提供...
7. **进程间通信(IPC)**:包括管道(pipe)、有名管道(fifo)、消息队列、共享内存、套接字等,这些都是Linux环境下进程间协同工作的关键。 8. **网络编程**:Linux系统支持丰富的网络编程接口,如socket API,...
无名管道用于父子进程通信,有名管道(FIFO)则适用于任意进程间通信。 信号是进程间通信的一种方式,可以用来响应特定事件或中断进程。共享内存允许不同进程访问相同的数据段,而信号量用于同步和保护共享资源。...
除了信号,UNIX还提供了多种进程间通信方式,如管道(pipe)、有名管道(FIFO)、共享内存、消息队列、套接字等。这些机制为进程协作提供了便利。 八、系统调用与库函数 UNIX系统调用是用户程序与内核交互的桥梁,...
- **管道(Pipe)和FIFO**:无名管道和有名管道(FIFO)是简单但有效的进程间通信方式。 - **共享内存**:多个进程可以直接访问同一块内存区域,高效但需同步控制。 - **消息队列**:允许进程间发送特定大小的...
熟悉管道(pipe)、有名管道(FIFO)、信号量、消息队列、共享内存和套接字(socket)等机制,可以帮助你设计出高效且可靠的多进程程序。 5. **网络编程**:Linux提供了丰富的网络编程接口,如socket API。理解和...
在Linux中,进程间的通信方式有多种,包括管道(pipe)、有名管道(FIFO)、消息队列、信号量、共享内存和套接字等。这些机制使得进程能够交换数据,协同工作。 "Linux复习知识点汇总.docx"可能是一个全面的Linux...
6. **进程间通信**:涵盖管道(pipe)、有名管道(FIFO)、消息队列、共享内存、信号量等多种进程间通信方式,帮助开发者实现复杂的并发控制。 7. **编译与链接**:解析了编译器、链接器的工作原理,以及如何编写...
7. **进程间通信**:Unix提供多种进程间通信方式,如管道(pipe)、有名管道(FIFO)、套接字(socket)等,这些都是多进程协同工作的重要手段。 8. **错误处理**:理解和处理Unix系统中的错误是高级编程的关键,书...
6. **进程间通信(IPC)**:了解管道(pipe)、有名管道(FIFO)、消息队列、信号量、共享内存等Linux进程间通信机制,以及如何在程序中应用它们。 7. **设备驱动编程**:深入到硬件层面,学习编写Linux设备驱动...
有名管道(FIFO)则是在文件系统中创建的特殊文件,支持更广泛的进程间通信场景。 #### 知识点10:文件和记录锁定 文件和记录锁定用于防止多个进程同时修改同一文件,确保数据的一致性和完整性。Linux支持多种锁定...