`
M_ittrue
  • 浏览: 76973 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

linux进程间通信(IPC)与控制---管道

 
阅读更多

进程有独立的用户内存地址,

进程的全局变量对其它进程透明,

需通过内核缓冲内共享数据,通信


管道: 声明在unistd.h头文件中

原型 int pipe(int filedes[2]);  filedes[0]表示输入管道,filedes[1]表示输出管道. 返回值:0表示创建管道成功,-1为失败/

代码测试:

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc,char* argv[])
{
	int fd[2];
	pipe(fd);//创建管道
	pid_t pid = fork();//生成子进程
	if(pid < 0){
	perror("fork failed");
	exit(1);
	}
	else if( pid >0){
	close(fd[0]);//父进程关闭输入管道
	write(fd[1],"hello child\n",12);//子进1向输出管道写入数据
	wait(NULL);
	}else{
	close(fd[1]);//子进程关闭输出管道
	char buf[50];
	read(fd[0],buf,12);
	//printf("%s",buf);
	write(STDOUT_FILENO,buf,12);//此处也可以用dup2,将信息输出到终端
		}
	return 0;
}

  如果想让子进程作为输出,父进程作为输出,可以使用wait(NULL) /wait(pid.....)让父进程处于阻塞状态,直到子进程完成输出.父     进程接收到signal后苏醒进行读取.在这里我没有过多的考虑PV操作了,可能会存在一些同步的问题,以后会进一步完善.

 

两个子进程间通信也是差不多的.

代码:

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc,char* argv[])
{
	int fd[2];
	pipe(fd);
	pid_t pid = fork();
	if(pid < 0){
	perror("fork failed");
	exit(1);
	}
	else if( pid >0){
	pid_t pidt = fork();
	if(pidt == 0){
	close(fd[0]);
	write(fd[1],"hello borther\n",14);
	}
	}else{
	close(fd[1]);
	char buf[50];
	read(fd[0],buf,14);
	//printf("%s",buf);
	write(STDOUT_FILENO,buf,12);
		}
	return 0;
}
 

 

分享到:
评论

相关推荐

    深刻理解Linux进程间通信(IPC)-详解.doc

    Linux进程间通信(IPC,Inter-Process Communication)是操作系统中多进程协同工作的重要机制,它允许不同的进程之间交换数据和协调工作。在Linux系统中,IPC主要包括多种通信手段,如管道(Pipe)、有名管道(Named...

    深刻理解Linux进程间通信(IPC)-详解.pdf

    综上所述,深刻理解Linux进程间通信(IPC)需要对各种通信机制有全面的认识,从基本的管道到更高级的共享内存和信号量,每一种都有其特点和适用场景。通过阅读本文档,可以增进对Linux IPC的深刻理解,从而在实际开发...

    linux进程间通信--IPC

    ### Linux进程间通信(IPC) 进程间通信(InterProcess Communication,简称IPC)是操作系统中一个重要的概念,指在计算机系统中不同的进程之间进行数据交换或通信的方法。在Linux环境下,进程间通信支持多种机制,...

    Linux进程间通信--Linux进程间通信

    Linux 进程间通信(IPC)是一种机制,允许不同的进程在操作系统中交换数据和信息。Linux 操作系统提供了多种进程间通信机制,包括管道、信号、消息队列、共享内存和套接口等。 Linux 进程间通信的重要性: 在 ...

    ipc.rar_IPC_linux 进程_进程间通信_进程间通信ipc

    本文将深入探讨标题“ipc.rar_IPC_linux 进程_进程间通信_进程间通信ipc”所涉及的知识点,包括Linux下的管道(pipe)、进程以及进程间通信的基本概念、工作原理和应用实例。 首先,让我们理解什么是进程。在Linux...

    UNIX Linux实验教程 4实验四Linux进程间通信.doc

    管道通信是 UNIX/Linux 操作系统中的一种常见的进程间通信方法。管道通信系统调用函数 lockf() 用于文件锁定和解锁,管道创建系统调用函数 pipe() 用于创建无名管道。lockf() 函数的原型为: int lockf(int files, ...

    Linux C程序设计大全-进程间通信IPC

    《Linux C程序设计大全-进程间通信IPC》深入解析了在Linux/UNIX系统下如何实现进程间的通信。进程间通信(IPC)是多进程协作的关键,使得不同进程能够互相访问和交换数据。这一主题涵盖了从基础概念到具体实现的各种...

    linux进程间通信ppt

    【Linux进程间通信】是操作系统中进程协作的重要方式,它允许不同的进程共享数据和资源,协同完成任务。在Linux系统中,进程间通信(IPC,Inter-Process Communication)包括多种技术,如管道、信号、信号量、共享...

    Linux进程间通信.pdf

    ### Linux进程间通信详解 #### 引言 在现代操作系统如Linux中,进程间通信(IPC,Inter-Process Communication)是实现多进程协同工作的重要机制。通过IPC,不同进程能够共享信息、同步状态以及协作完成复杂的任务...

    linux系统编程--进程间通信--管道

    常用的进程间通信方式有多种,包括无名管道、有名管道、信号、System V IPC 对象共享内存、消息队列和信号灯、BSD 套接字等。 本文主要介绍无名管道(pipe)的概念和使用方法。无名管道是一种半双工的通信方式,...

    深刻理解Linux进程间通信

    ### 深刻理解Linux进程间通信 #### Linux进程间通信概述 进程间通信(Inter-Process Communication,简称IPC)是指在多进程环境下,不同进程之间进行数据交换或同步操作的技术。Linux作为一款广泛使用的开源操作...

    Linux 进程间通信

    在深入探讨Linux中的进程间通信(IPC)机制之前,我们先了解一个基本概念:**进程**。进程是程序执行的一个实例,每个进程都有自己的地址空间。当多个进程需要进行数据交换时,就需要用到进程间通信技术。Linux提供...

    linux 进程间通信

    本示例“Linux 进程间通信”着重演示了System V IPC机制,包括信号量(Semaphore, sem)、共享内存(Shared Memory, shm)和管道(FIFO)三种方式。这些技术广泛应用于构建复杂、高效的系统和服务,尤其是在需要不同...

    Linux进程间通信-信号量通信进程互斥实例.pdf

    【Linux进程间通信】在操作系统中,进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据的重要机制。Linux提供了多种IPC方式,包括管道、消息队列、共享内存、信号量等。本实例主要关注的是...

    Linux进程间通信之管道

    标签"LINUX IPC PIPE"表明这是一个关于Linux进程间通信管道的知识点。文件"pipe"可能包含了示例代码或实验数据,用于演示如何在C语言或其他支持系统调用的编程语言中实现父子进程间的管道通信。 总之,Linux进程间...

    linux进程间通信

    提供的两份文档《7.0_Linux进程间通讯_上.pdf》和《7.1_Linux进程间通讯_下.pdf》将详细阐述上述各种通信机制,并可能包含实例代码和实践指导,对于深入理解和掌握Linux进程间通信非常有帮助。 总结,Linux进程间...

    linux下进程间通信的研究与实现

    进程间通信(IPC,Inter-Process Communication)在Linux操作系统中扮演着至关重要的角色,尤其在多任务和多线程环境下。随着计算机技术的发展,进程间的协作与数据交换成为提升系统效率和灵活性的关键。本文将详细...

    深入理解Linux进程间通信

    《深入理解Linux进程间通信》 在复杂的软件系统中,多个进程协同工作是常见的现象,因此,进程间通信(IPC,Inter-Process Communication)成为必不可少的技术。Linux作为一款开源的操作系统,提供了丰富的进程间...

    linux进程间通信管道

    通过学习和实践`pipe_write.c`和`pipe_read.c`,你可以更好地理解命名管道的工作原理及其在Linux进程间通信中的应用。这个知识对于开发多进程应用程序,特别是在系统级编程和网络服务领域,是非常基础且重要的。

Global site tag (gtag.js) - Google Analytics