读写无名管道,也有这么多种情况?

无名PIPE的读端和写端都默认以阻塞的方式操作。

但又分为有没有进程访问写端,有没有进程访问读端。

管道中目前有没有数据,

如果管道中有数据,是大于要读出的数据,还是小于要读出的数据。。。。

编程真的要考虑到最细微的内存字节处,所以这种人作事,计划得会周密吧。

我记得有一个C的书上写过,编程的要旨就是一句话:看到好你的每一个字节!!!!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4
 5 int main(void)
 6 {
 7     int p[2];
 8     pipe(p);
 9     write(p[1], "helloworld", 10);
10     //close(p[1]);
11     char buf[128];
12     memset(buf, '\0', 128);
13     int ret = -1;
14     ret = read(p[0], buf, 3);
15     printf("first, ret = %d, buf = %s\n", ret, buf);
16     ret = read(p[0], buf, 15);
17     printf("second, ret = %d, buf = %s\n", ret, buf);
18 }

输出:

[root@localhost ~]# ./pip2
first, ret = 3, buf = hel
second, ret = 7, buf = loworld

时间: 2024-09-14 13:37:13

读写无名管道,也有这么多种情况?的相关文章

Linux进程间通信(二) 管道通信之无名管道及其基础实验

管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输 入(其实我更愿意将管道比喻为农村浇地的管子).Linux的管道主要包括两种:无名管道和有名管道.这一节 主要讲无名管道,首先介绍一下这两个管道.(特点很重要啊!) 1.无名管道 无名管道是 Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点: ①  它只能用于具有亲 缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间): ②  它是一个半双工的通信模 式,具有固定的读端和写端: ③

Linux下C编程,进程通信之无名管道通信

最近在看进程间的通信,下面说说管道通信之无名管道. 1.概述 管道是Linux中很重要的一种通信方式,他是把一个程序的输出直接连接到另一个程序的输入,并且管道具有队列的特性.如Linux命令,"ps -ef | grep root".如下图所示: 2.无名管道 2.1特点 (1)它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间). (2)它是一个半双工的通信模式,具有固定的读端和写端. (3)管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read.w

Linux下的无名管道pipe的设计

  1. 函数说明 pipe(建立管道): 1) 头文件 #include 2) 定义函数: int pipe(int filedes[2]); 3) 函数说明: pipe()会建立管道,并将文件描述词由参数filedes数组返回. filedes[0]为管道里的读取端 filedes[1]则为管道的写入端. 4) 返回值: 若成功则返回零,否则返回-1,错误原因存于errno中. 错误代码: EMFILE 进程已用完文件描述词最大量 ENFILE 系统已无文件描述词可用. EFAULT 参数

js过滤特殊字符输入适合输入、粘贴、拖拽多种情况

 这篇文章主要介绍了js过滤特殊字符输入适合输入.粘贴.拖拽多种情况,需要的朋友可以参考下  代码如下: function TextValidate(type) {  var code;  var character;  var Lang = document.getElementById('Lang').value;  var err_msg = "";  if (Lang != "Eng") {  err_msg = "文件夹名稱不能包含下列字符之一:

练习--LINUX进程间通信之无名管道PIPE

IBM上放的这个系统不错,刚好可以系统回温一下LINUX的系统知识. http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/ 感觉年纪大了,前几年看的LINUX内核和系统的东东,忘了很多,要慢慢转化成永久记忆才可以. 今天,又拿起<LINUX内核设计与实现>,慢慢啃下去. ~~~~~~~~~~~~~~ 进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间B.共享数据:多个进程想

ASP.NET实现单点登陆(SSO)适用于多种情况_实用技巧

第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web.config里Authentication节form设定的name信息,如 复制代码 代码如下: <authentication mode="Forms"> <forms loginUrl="login.aspx" name=".ASPXAU

消息队列和管道的区别(转载)

转载自:http://bbs.chinaunix.net/viewthread.php?tid=265266 作者:beginner-bj 请问管道和消息队列有什么不同  管道通信(PIPE) 管道通信方式的中间介质是文件,通常称这种文件为管道文件.两个进程利用管道文件进行通信时,一个 进程为写进程,另一个进程为读进程.写进程通过写端(发送端)往管道文件中写入信息:读进程通过读 端(接收端)从管道文件中读取信息.两个进程协调不断地进行写.读,便会构成双方通过管道传递信息 的流水线. 利用系统调用

Linux进程间通信(三) 管道通信之有名管道及其基础实验

有名管道(FIFO) 首先将上一节的有关有名管道的定义再贴出来 有名管道是对无名管道的一 种改进,它具有以下特点: ①  它可以使互不相关的两个进程间实现彼此通信: ②  该管道可以通过路径名来指出,并且在文件系统中是可见的.在建立了管道之后,两个进程就可以把它 当做普通文件一样进行读写操作,使用非常方便: ③  FIFO严格地遵循先进先出规则,对管道及 FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作 . 有名管道的创建可以使用函数

无名管道的C++封装

xpipe-无名管道的C++封装类 无名管道的C++封装类,用于父子进程进行通信 基础介绍 unix下一切皆文件,管道也不例外.无名管道pipe定义在<unistd.h>中. #include <unistd.h> int pipe(int fd[2]); 其中fd[0]是读端,fd[1]是写端,fd[1]的输出是fd[0]的输入,因此管道是一个有向的半双工通信方式.使用`write(fd[1],...)`和`read(fd[0],...)`对管道中的信息进行读写.无名管道通常运用