1管道是什么: 水管子大家知道,有两端,在此一端用来读一端用来写,其中一端的输出作为另外一端的输入. 2 函数原型 int pipe(int pipefd[2]);//参数中分别代表的两端 3 例子:管道一端作为写 另外一端作为读 父子进程实现 #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { pid_t pid; int temp; ]; ]="letgo"…
管道 只能用于具有亲缘关系的进程之间通信是一个半双工的通信模式, 具有固定的写读端和写端,管道可以看成一种特殊的文件,对它可以使用普通的read.write等操作 管道的创建: #include <unistd.h> int pipe(int fd[2]) 该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由pipe()创建管道后,一般再fork一个子进程, 然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共…
1.查看命令: man 2 pipe 2.头文件:#include <unistd.h> 3.函数原型: int pipe(int pipefd[2]); a.pipefd[2] :无名管道的两个文件描述符,int型的数组,大小为2,pipefd[0]为读端,pipefd[1]为写端 4.返回值: 成功:返回0 失败:返回-1 5.函数特点:无名管道是最简单的常用于一对一的亲缘进程间通信的方式,既然说是管道,所以可以想象成一条水管,连接两个进程一个进程负责输入数据,另一个进程负责接收数据,反过…
无名管道: 1)只能用于具有亲缘关系的进程之间的通信(无名管道是某一个进程创建的,不像普通文件有路径,在文件系统中是不可见的,其他进程要想打开,只能通过继承的方式去打开) 2)半双工的通信模式,具有固定的读端和写端 3)管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read.write函数. 4)管道是基于文件描述符的通信方式.当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1].其中fd[0]固定用于读管道,而fd[1]固定用于写管道. 注意事项: 1)当管道中无数据时…
本文转载自:http://blog.chinaunix.net/uid-13059007-id-5766941.html 有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主 要有: filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件…
有些时候,我们需要在Linux中使用stat命令来查看文件的详细信息.另外联想下,ls -l命令显示的是什么时间,touch命令修改文件的时间戳,修改的又是什么时间?在这里我们一起来试验下. 首先,我们来看下stat情况: 如图所示,会出现3个类型的时间,分别是Access,Modify,Change.下面我们就对这3个时间进行详细解释下. access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间 modify time:表示我们最后一次修改文件的时间 change tim…
设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)sudo chmod 666 ××× (每个人都有读和写的权限)sudo chmod 777 ××× (每个人都有读和写以及执行的权限) -R表示包含设置所有子目录…
1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2 如果没有用vert命令,diffsplit则会分上下两个窗口. 3. 如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同. 分别在两个窗口里面输入命令: :diffthis 4. 如果更改了某个窗口的内容,vim又没有自动更新…
Linux下无名管道一般仅用于父子进程间的通信: 测试代码如下 //file name: fifo_test.c #include <sys/prctl.h> #include "fifo_test.h" int main(int argc, char **argv) { int ret = 0; char buf[32] = {'\0'}; int pipe_fd[2]; //0---read 1--write pid_t pid; if(pipe(pipe_fd)<…
一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2…
无名管道是linux中管道通信的一种原始方法,有以下特征: 1.单工通信模式,具有固定的读端和写端: 2.管道可以看成是一种特殊的文件,对于它的读写可以使用普通的read(),write()等文件IO操作函数接口,但是它不属于任何文件系统,并且只存在与内存中: 3.只能用于具有亲缘关系的进程之间的通信: 4.通常使用时,首先创建一个管道,然后调用fork函数创建一个子进程,该子进程会继承父进程所创建的管道: 5.只有在管道的读端存在时,向管道写入数据才有意义,否则向管道写入的数据的进程将收到内核…
无名管道 无名管道是半双工的,就是对于一个管道来讲,只能读,或者写. 无名管道只能在相关的,有共同祖先的进程间使用(即一般用户父子进程). 一个fork或者execve调用创建的子进程继承了父进程的文件描述符. 打开和关闭管道 ]); 在你从一个管道中读出或者写入数据,这个管道必须存在. 如果成功建立了管道,则会打开两个文件描述符,并把他们的值保存在一个整数数组中. 第一个文件描述符用于读取数据,第二个文件描述符用于写入数据.管道的两个文件描述符相当于管道的两端,一端只负责读数据,一端只负责写数…
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(…
Linux中用st_mode判断文件类型 2012-12-11 12:41 14214人阅读 评论(4) 收藏 举报  分类: Linux(8)  C/C++(20)  版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux中,可以利用stat()函数来获取一个文件的状态 #include <sys/stat.h> #include <unistd.h> int stat(const char *file_name, struct stat *buf); 这个函数执行成…
特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程.兄弟进程.子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 通过man 2 pipe查看 #include <unistd.h> int pipe(int pipefd[2]); 打开两个文件描述符,保存在pipefd中,其中pipefd[0]为读端,pipefd[1]为写端 无名管道写入操作不具有原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数…
Linux系统中提供了系统调用函数open()和close()用于打开和关闭一个存在的文件 int open(const char *pathname,int flags) int open(const char *pathname,int flags,mode_t mode) int open(const char *pathname,mode_t mode) 其中flag代表文件的打开方式 O_RDONLY: 以只读方式打开文件 O_WRONLY:以只写的方式打开文件 O_RDWR:以读写的…
转自 http://www.open-open.com/lib/view/open1474356438277.html 缓存 缓存是用来减少高速设备访问低速设备所需平均时间的组件,文件读写涉及到计算机内存和磁盘,内存操作速度远远大于磁盘,如果每次调用read,write都去直接操作磁盘,一方面速度会被限制,一方面也会降低磁盘使用寿命,因此不管是对磁盘的读操作还是写操作,操作系统都会将数据缓存起来 Page Cache 页缓存(Page Cache)是位于内存和文件之间的缓冲区,它实际上也是一块内…
---- 今天分享一下在linux系统在实现对文件读写一些基本的操作,在这之前我们要掌握一些基本的技能在Linux环境下.比如查看命令和一个函数的具体用法,就是相当于查手册,在Linux下有一个man手册非常有用:man查询手册man 1 +命令 这里的1表示为查询的是Linux命令man 2 xxx 这里的2表示为查询的是linux apiman 3 xxx 这里的3表示为查询的是c库函数在了解了这个后我们就可以开始来实现标题说的操作了.一.在linux环境下常用文件接口函数:open.clo…
文件的读写执行权限的说明 X 进入目录的权限: cd 1.文件本身是可执行的 2.普通用户还具备r的权限 3.root用户只需要有r的权限即可 r 查看目录/文件的内容 :ls dir 没有读的权 限,vi无法编辑,强制编辑会覆盖数据,echo可以追加数据 没有x权限,ls列表时可以看到文件名,但是提示为无法访问下一集目录 w 增加删除修改文件内文件名(需要x权限配合):rm 没有r无法列表,没有x无法进去(cd) 没有w无法创建和删除 特别提醒:删除文件,修改文件名的权限受父目录的控制,和文件…
Linux 进程间通信-管道 进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源.但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的传递,因此需要进程间数据传递.同步与异步的机制. 此篇博文记录管道. 管道pipe 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种文件系统,而是一种独立的文件系统…
有名管道 只有当一个库函数失败时,errno才会被设置.当函数成功运行时,errno的值不会被修改.这意味着我们不能通过测试errno的值来判断是否有错误存在.反之,只有当被调用的函数提示有错误发生时检查errno的值才有意义. 查看错误代码errno是调试程序的一个重要方法.当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因.在实际编程中用这一招解决了不少原本看来莫名其妙的问题.…
一.进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication).如下图所示. 二.管道是一种最基本的IPC机制,由pipe函数创建: #include <unistd.h> int pipe(int filedes[2]); 调用pipe…
2017-04-07 管道通信在linux中使用较为频繁的进程通信机制.基于unix一切皆文件的传统,管道也是一种文件.所以可以使用一般的VFS接口对管道进行读写操作,如read.write.具体管道分为有名管道和无名管道.无名管道的使用场景较为局限,仅仅限制在有亲缘关系的进程之间通信,多由于父子进程.而有名管道使用就广泛一些,可以在任何有权限的进程之间进行通讯.而这正是有其本质的实现机制所导致的. 一.无名管道 在linux中,管道的实现没有具体的数据结构,而是借助了文件系统的file结构和V…
 进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication) 如下图所示: 进程间通信共七种方式: 第一类:传统的unix…
 无名管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信: 定义函数: int pipe(int filedes[2]) filedes[0]为管道里的读取端 filedes[1]则为管道的写入端. 实现机制: 管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条.管道的一端连接一个进程的输出.这个进程会向管道中放入信息.管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息.一个缓…
管道是 Linux 里的一种文件类型,同时也是 Linux 系统下进程间通信的一种方式   创建一个管道文件有两种方式:  Shell 下命令 mkfifo + filename,即创建一个有名管道  C 语言里调用 pipe() 函数,创建一个无名管道 有名管道 / 无名管道  区别:  有名管道在程序外部使用 mkfifo 命令生成,无名管道在程序内部调用 pipe() 函数创建:  顾名思义,有名管道有文件名,无名管道没有文件名:  有名管道生成后直到删除都存在,无名管道在程序退出时则生命…
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication),即指在不同进程之间传播或交换信息.IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量.共享存储.Socket.Streams等.其中 Socket和Stre…
1,进程间通信 (IPC ) Inter-Process Communication 比较好理解概念的就是进程间通信就是在不同进程之间传播或交换信息. 2,linux下IPC机制的分类:管道.信号.共享内存.消息队列.信号量.套接字 3,这篇主要说说管道:本质是文件,其他理论什么的网上已经有一大堆了,我就只写一点用法吧. 3.1 特点 1)管道是最古老的IPC,但目前很少使用     2)以文件做交互的媒介,管道分为有名管道和无名管道     3)历史上的管道通常是指半双工管道 3.2 管道:有…
有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的其中一个,可以创建命名管道. #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *filename, mode_t mode); int mknod(const char *filename, mode…
本文是对http://www.cnblogs.com/andtt/articles/2136279.html管道一节的进一步阐释和解释 1 管道 1.1 管道简介 管道是unix系统IPC的最古老的形式,并且所有的unix系统都提供此种通信机制:它有下面两种局限性 它的工作方式是半双工,即数据只能在一个方向上流动:即只能一个进程写,另一个进程读或者一个进程读,另一个进程写:如果想要两个进程同时读写,则必须建立两个管道 它们只能在具有公共祖先的进程之间使用:通常情况下是父进程建立管道,然后fork…