首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unix-Linux编程实践教程-chapter15-IPC

第15章 进程间通信(IPC) 许多程序都包含一个或多个进程.进程间通过共享数据或传递数据进行通信.举例来说, 两个人通过使用Unix的talk命令进行对话,他们就运行了两个进程,将数据从键盘和socket...传输到屏幕和socket 某些进程需要从多个源端接受数据,并将数据送到多个目的地.select和poll调用允许进程 等待多个文件描述符的输入 Unix提供了许多方法来进行数据在进程间传输,命名管道和共享内存是同一机器上的进程间....进程挂起等待另一进程改变信号量的值 纵观IPC: fork-execv-argv, exit-wait 用于使用一组参数来调用某个程序,被调用函数将一个整形值返回给其调用者 面向消息,只能用在相关的进程中...字节流通过socket进行传输,从一个进程到另一个进程 面向消息,面向流,双向传输,可以在无关进程中使用,可通过网络传输 Named Sockets 命名socket,使用文件名作为地址而不是主机名-...端口号对 面向消息,面向流,双向传输,可以在无关进程中使用,单机 Named Pipes(FIFOs) 命令管道工作方式类似于常规管道,但是可以连接两个无关进程 单向,面向流,可以连接无关进程,单机 File

61720

一文快速了解进程、线程与协程

影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。...,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication) Linux IPC的主要方式 1.管道(pipe) 管道,通常指无名管道...2.命名管道(namedpipe) FIFO,也称为命名管道,它是一种文件类型,也是半双工的通信方式。多个进程都可以通过一个约定好的名字找到同一个管道。FIFO允许无亲缘关系进程间的通信。...FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据,并且“先进先出”。 ?...进程通信方式总结 管道:速度慢,容量有限,只有父子进程能通讯 命名管道:任何进程间都能通讯,但速度慢 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题 共享内存:能够很容易控制容量

15.2K62
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】进程间通信>管道&&共享内存&&消息队列&&信号量详解

    和Better C++ Syntax等),和以前⽐不需要⼀个个找了 4....管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道 命名管道是一种特殊类型的文件 2.3.1...创建命名管道 命名管道可以从命令行上创建,命令行方法是使用下面这个命令 $ mkfifo filename 命名管道也可以从程序里创建,相关函数有 int mkfifo(const char *...被保护起来的资源 --- 临界资源 ---- 同步和互斥:- 用互斥的方式保护共享资源 ---临界资源 互斥:任何时刻只能有一个进程在访问共享资源 资源 --- 要被程序员访问 --- 资源被访问,朴素的认识...在进程中涉及到互斥资源的程序段叫临界区 特性方面 IPC资源必须删除,否则不会自动清除,除非重启,所以system V IPC资源的生命周期随内核 7.OS管理 操作系统如何把共享内存,消息队列,信号量统一管理起来

    18410

    内网渗透的步骤_内网渗透思路

    SMB 协议就是用于实现各种资源的共享的,其中就包括IPC连接中的命名管道。 在Windows NT中SMB基于NBT实现。...使用命名管道的原因一般有两个方面: 提高速度:假设同样在局域网中,那么使用命名管道协议会比TCP/IP协议快一些。...进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。有两种类型的进程间通信(IPC)。...前面已经说了,共享是包括命名管道的,而命名管道正是连接方式,因此SMB协议的共享其实是包含IPC的,不仅如此,它还依赖于IPC连接。但是归根结底,对于连接后的计算机的远程管理,还是要依托于VMI。...(named pipe)及其使用 进程间通信(IPC):共享内存和消息队列原理详解 命名管道 TCP/IP协议 匿名管道 Windows系统安全 | IPC共享和其他共享(C、D、Admin) 版权声明

    4.9K30

    由一道面试题来了解进程间的通信

    =NULL)  printf("%s",buf); pclose(fp); exit(0); } 命名管道(FIFO) 基本概念 命名管道和一般的管道基本相同,但也有一些显著的不同: A、命名管道是在文件系统中作为一个特殊的设备文件而存在的...4  命名管道   命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。...不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。   ...当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板上拾取数据,从给定格式中选择适合自己的格式。   ...RPC既可以在单机不同进程间使用也可以在网络中使用。

    2.2K70

    横向移动-IPC

    IPC(共享命名管道资源)其实就是为了实现进程间通信而开放的命名管道;它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问...和AT命令一样,我们先和目标主机建立IPC连接,将木马上传到目标机器中,然后再使用schtasks命令执行木马程序 net use \\192.168.3.32 "admin!...这时代理设置好了之后,我们就可以直接在本机中使用atexec.py对其内网进行横向移动了,具体命令如下: python atexec.py ....,可较大程度的避免在实战中上传较大exe程序,被查杀或上传失败的效果 python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ....god/administrator@192.168.3.21 "whoami"#本地用户使用hash进行IPC连接 那么在这里,我们上线CS的步骤也和上文中使用atexec.exe上线步骤一致,这里不再演示

    1.9K80

    Flow-IPC 提升 C++ 开发人员的进程间通信

    Flow-IPC 解决了传输大量数据量的挑战,允许程序在不同的处理器核心上同时执行线程。...当这些线程在不同的程序中运行时,例如 Web 服务器和安全服务器,就会出现挑战。在这些程序之间传输 大量数据 的传统方法可能很慢且效率低下,这通常是由于不同的操作系统管理内存的方式造成的。...本着这种精神,我们在今年早些时候 推出了 Flow-IPC。它是一个开源 中间件(Apache 2.0 和 MIT 许可证),专门设计用于帮助 C++ 程序员简化他们的 IPC。...它托管在 GitHub 上,并附带完整的文档、自动化测试和演示,以及一个 CI 管道,该管道在各种 GNU 编译器集合 (GCC) 和 Clang 编译器版本和构建配置中进行测试,包括通过运行时清理器(...相关文章: Penpot 吸引开发者,用开源工具挑战 Figma 为什么开发者需要自己的可观测性 Python 的演变方式 Bun 1.0 作为 Node.js 和 Deno 的替代品发布 专业开发者定制的

    23510

    深度好文|面试官:进程和线程,我只问这19个问题

    标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。...匿名管道有个缺点就是通信的进程一定要有亲缘关系,而命名管道就不需要这种限制。...命名管道其实就是一种特殊类型的文件,所谓的命名其实就是文件名,文件对各个进程都可见,通过命名管道创建好特殊文件后,就可以实现进程间通信。...消息队列VS命名管道 消息队列>命名管道 1)消息队列收发消息自动保证了同步,不需要由进程自己来提供同步方法,而命名管道需要自行处理同步问题; 2)消息队列接收数据可以根据消息类型有选择的接收特定类型的数据...消息队列命名管道 消息队列有一个缺点就是发送和接收的每个数据都有最大长度的限制。

    89920

    Linux进程间通信之管道

    进程间通信介绍: 进程间通信的概念: 进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。...进程间通信的发展: 管道 System V进程间通信 POSIX进程间通信 进程间通信的分类:  管道 匿名管道 命名管道 System V IPC System V 消息队列 System...2.读端进程不读,写端进程一直写,那么当管道被写满后,对应的写端进程会被挂起,直到管道当中的数据被读端进程读取后,写端进程才会被唤醒。...从上图可以算出管道的大小为512*8 = 4096字节。  命名管道: 刚才介绍的匿名管道,只可用于父子进程间通信,如果两个毫不相干的进程要实现通信该怎么办呢?接下来就需要介绍一下命名管道了。...用命名管道实现serve&client通信 serve管理管道负责创建,销毁和读取消息,client负责往管道中写入消息: serve.cc: #include #include

    9310

    Linux进程间通信

    管道与FIFO文件 一个原始的IPC方式是所有的进程通过一个文件交流。比如我在纸(文件)上写下我的名字和年纪。另一个人读这张纸,会知道我的名字和年纪。...在Linux文本流中,我们已经讲解了如何在shell中使用管道连接多个进程。...同样,许多编程语言中,也有一些命令用以实现类似的机制,比如在Python子进程中使用Popen和PIPE,在C语言中也有popen库函数来实现管道 (shell中的管道就是根据此编写的)。...从原理上,管道利用fork机制建立(参考Linux进程基础和Linux从程序到进程),从而让两个进程可以连接到同一个PIPE上。...键值可以通过某种IPC方式在进程间传递(比如说我们上面说的PIPE,FIFO或者写入文件),也可以在编程的时候内置于程序中。

    3.8K101

    进程?线程?小朋友你是否有很多问号?

    标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。...在多CPU系统中,多线程是有益的,在这样的系统中,通常情况下可以做到真正的并行。 C/C++中如何使用多线程编程?...命名管道其实就是一种特殊类型的文件,所谓的命名其实就是文件名,文件对各个进程都可见,通过命名管道创建好特殊文件后,就可以实现进程间通信。...消息队列VS命名管道 消息队列>命名管道 1)消息队列收发消息自动保证了同步,不需要由进程自己来提供同步方法,而命名管道需要自行处理同步问题; 2)消息队列接收数据可以根据消息类型有选择的接收特定类型的数据...消息队列命名管道 消息队列有一个缺点就是发送和接收的每个数据都有最大长度的限制。

    76820

    面试总结-操作系统

    管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的首端读出数据。...数据读出后将从管道中移走,其它读进程都不能再读到这些数据。分为普通管道、流管道、命名管道。...(2)命名管道(named pipe):命名管道也是半双工的通信方式,它克服了管道没有名字的限制,并且它允许无亲缘关系进程间的通信。...命令管道在文件系统中有对应的文件名,命名管道通过命令mkfifo或系统调用mkfifo来创建。 (3)信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。...共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。

    91930

    Linux进程通信

    Linux进程通信 1 管道(pipe) 1.1 无名管道 1.1.1 概念和相关知识 1.1.2 相关函数 1.2 命名管道 1.2.1 概念及相关知识 1.2.2 相关函数 2 信号量(semaphore...1.2 命名管道 1.2.1 概念及相关知识 命名管道可以使用在两个互不相干的进程间通信,有名管道可以通过路径名指出,并在文件系统中显示出来。...用open函数打开命名管道时要注意亮点: 不能以O_RDWR模式打开命名管道FIFO文件,否则其行为是未定义的管道是单向的,不能同时读写; 传递给open调用的是FIFO的路径名,而不是正常的文件 打开...key:命名消息队列的键,一般用ftok函数获取;msgflg:消息队列的访问权限,可以与以下键或操作:IPC_CREAT:不存在则创建,存在则返回已有的qid; 返回值:成功时返回以key命名的消息队列的标识符...在Linux系统中,1024以下的端口只有拥有root权限的程序才能绑定。

    1.9K20

    Linux进程间通信(一) - 管道

    例如:ps | grep vsftpd .管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。...写进程在管道的尾端写入数据,读进程在管道的头端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。管道主要用于不同进程间通信。...相关函数: //打开一个管道,2个int的数组fildes分别存储读端和写端的FD Int pipe(int fildes[2]); //管道读 ssize_t read(int fd, void* buf.../ipc_pipe print from parent ==> Hello Pipe 命名管道(FIFO) 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的匿名管道...由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。

    3K70

    进程间通信和线程间通信的区别_有些线程包含多个进程

    反映了一个程序在一定的数据集上运行的全部动态过程。 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。...信号之间依靠他们的值来区分,但是通常在程序中使用信号的名字来表示一个信号。在Linux系统中,这些信号和以他们的名称命名的常量被定义在/usr/includebitssignum.h文件中。...例子:主程序阻塞了cltr+c的sigint信号。用sigpromask将sigint假如阻塞信号集合。 管道: 管道允许在进程之间按先进先出的方式传送数据,是进程间通信的一种常见方式。...用ls -p命令查看文件的类型时,可以看到命名管道对应的文件名后有一条竖线”|”,表示该文件不是普通文件而是命名管道。...可以用删除普通文件的方法将其删除,实际删除的事磁盘上对应的节点信息。 例子:用命名管道实现聊天程序,一个张三端,一个李四端。

    1.2K30

    PHP进程通信之管道与消息队列(二十三节)

    先说下这个叫做posix_mkfifo()的函数,FIFO有些地方叫命名管道,本质上TA是一个文件,你可以用var_dump()来检验一下,FIFO是支持双向通信的: <?...1 2文件描述 // 指向自己配置的pipe管道和file文件 // 你还可以自己手动往数组里添加新的文件描述符 $a_pipe_desc = array( 0 => array("pipe".../test.log", "a"), ); // 这个测试PHP程序的工作目录,我设置为当前了 $s_cwd = './'; // 这个管道就是在「PHP程序」与「bash程序」之间 // 这个管道是双向的...吧,用Python读取,用PHP写入,我告诉你别小瞧你李哥,你李哥活儿全: <?...# Main msg_queue_key = sysv_ipc.ftok( "/Users/didi/python", 97 ) msg_queue = sysv_ipc.MessageQueue

    1.4K31

    理解Nodejs中的进程间通信

    根据系统的不同实现方式不同,window 下采用命名管道实现,*nix 下采用 Domain Socket 实现。在应用层只体现为 message 事件和 send 方法。...子进程在启动的过程中,会根据该文件描述符去连接 IPC 通道,从而完成父子进程的连接。建立连接之后可以自由的通信了,IPC 通道是使用命名管道或者 Domain Socket 创建的,属于双向通信。...(Named Pipe)是什么命名管道是可以在同一台计算机的不同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的单向或者双向的数据通信。...创建命名管道的进程被称为管道服务端(Pipe Server),连接到这个管道的进程称为管道客户端(Pipe Client)。...CloseHandle(clientNamePipe);}Node 创建子进程的流程Unix图片对于创建子进程、创建管道、重定向管道均是在 c++ 层实现的创建子进程int main(int argc

    91920

    【Linux进程间通信】深入探索:Linux下的命名管道与System V共享内存

    在众多IPC机制中,命名管道和System V共享内存无疑是两种最为常见且强大的工具 命名管道,又称为FIFO(First In First Out)管道,是一种在进程间传输数据的管道机制。...这种机制在需要高效数据交换的场景中特别有用,例如数据库系统、实时系统等 本文旨在深入探讨Linux进程间通信中的命名管道和System V共享内存。...mode); 匿名管道与命名管道的区别 匿名管道由pipe函数创建并打开 命名管道由mkfifo函数创建,打开用open FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同...总结 随着我们对Linux进程间通信中命名管道和System V共享内存的深入学习,不难发现,这两种机制在操作系统中扮演着举足轻重的角色。...命名管道以其灵活性和易用性,成为了不同进程间进行数据交换的桥梁;而System V共享内存则以其高效性和低延迟,成为了高性能应用中的首选通信方式 在本文中,我们详细探讨了命名管道和System V共享内存的基本原理

    20310

    【Linux】深度探秘命名管道:Linux 进程通信的无声桥梁

    大家好,我是Yui_,一位努力学习C++/Linux的博主~1.什么是命名管道在 Unix/Linux 系统中,管道(Pipe)是一种重要的进程间通信(IPC,Inter-Process Communication...命名管道通过一个在文件系统中存在的路径名来标识,使得不相关的进程之间也能通过它进行通信。命名管道是一种特殊类型的文件,它在文件系统中有一个明确的名称,可以被多个进程打开和访问。...无需父子关系:任何进程都可以打开命名管道进行读写,不需要继承关系。2. 创建命名管道创建命名管道有两种方法:直接在命令行上创建。在程序中创建。...程序中创建命名管道为了在C程序中创建命名管道,我们需要用到的函数也是mkfifo。...我们可以利用命名管道实现不同进程间IPC,也就是一个进程读取文件中的内容然后写进管道当中,然后另一个进程在通过管道将数据读出保存到新的文件,如此一来就是实现了一个进程的文件拷贝功能。

    13810

    浅谈 windows 命名管道

    在 Windows 系统中,存在两种类型的管道: “匿名管道”(Anonymous pipes)和“命名管道”(Named pipes)。...由于匿名管道单向通信,且只能在本地使用的特性,一般用于程序输入输出的重定向,如一些后门程序获取 cmd 内容等等,在实际攻击过程中利用不过,因此就不过多展开讨论,有兴趣可以自行检索相关信息。...这是由于命名管道利用了微软网络提供者(MSNP)重定向器通过同一个网络在各进程间建立通信,这样一来,应用程序便不必关心网络协议的细节。...5、多个独立的管道实例可以用一个名称来命名。例如几个客户端可以使用名称相同的管道与同一个服务器进行并发通信。 6、命名管道的客户端可以是本地进程(本地访问:\....用 PIPE_ACCESS_DUPLEX 创建的管道对于管道服务器和管道客户端都是可以读/写的。

    10.1K30
    领券