进程间通信---在父进程跟子进程之间利用管道进行通信。一个简单的例子

#include <fcntl.h>								//提供open函数
#include <sys/types.h>                          // 该头文件提供系统调用的标志
#include <sys/stat.h>                           // 该头文件提供系统状态信息和相关函数
#include <sys/uio.h>                            // 该头文件提供进程I/O操作的相关函数
#include <unistd.h>                                     // 标准函数库
#include <fcntl.h>                                              // 文件操作相关函数库
#include <string.h>                                             // 字符串操作函数库
#include <sys/wait.h>                                   // wait调用相关函数库
#include <stdio.h>                                              // 标准输入与输出函数库
#include <stdlib.h>                                             // 常用工具函数库

int main() {
	int fd[2], len;
	char buf[200];
	pid_t cld_pid;
	if(pipe(fd) == -1) {
		puts("创建管道失败");
	}
	if((cld_pid = fork()) == 0) {        //zijincheng
		close(fd[1]);      //关闭写端口
		len = read(fd[0], buf, sizeof(buf));
		printf("1\n");
		buf[len] = '\0';
		printf("子进程从管道中读取的数据是:%s\n", buf);
		exit(0);
	} else {							//fujincheng
		close(fd[0]);     //关闭读端口
		printf("2\n");
		sprintf(buf, "zijinchengde pid shi %d", cld_pid);
		write(fd[1], buf, strlen(buf));
		exit(0);
	}
	return 0;
}

时间: 2024-10-27 11:06:55

进程间通信---在父进程跟子进程之间利用管道进行通信。一个简单的例子的相关文章

Linux下利用fork()创建子进程并使父进程等待子进程结束

int status; pid_t t = fork(); if(t){ waitpid(t, &status, 0); }else{ system("vi temp.txt"); exit(0); } //父进程和子进程均执行完毕后继续执行下去 分析过程: if 和 else 还是选择分支. 主要的原因是,fork() 函数调用一次,返回两次.两次返回的区别是:子进程的返回值是0,父进程返回值为新子进程的进程ID.返回后,父进程执行waitpid(t, &status

关于父进程和子进程的关系(UAC 绕过思路)

表面上看,在windows中.如果是a进程创建了b进程,那么a进程就是b进程的父进程,反之,如果是b创建了a,那么b进程就是a的父进程,这是在windows出现以来一直是程序猿们都证实的,但是在在win Vista后面有了一个新安全消息机制,UAC(user account control),这里科普下UAC的功能,其实UAC就是大家常见的安装软件或者启动程序的时候的出现的全屏变暗的一个提示框,这里顺便提醒下大家不要把它的提醒级别降低,这里大家不要蓄意把他的提示级别较低,这样会带来很大的安全隐患

linux程序设计——父进程和子进程(第十三章)

13.5    父进程和子进程 这节将介绍如何在子进程中运行一个与父进程完全不同的另外一个程序,而不是仅仅运行一个相同程序.使用exec调用来完成这一项工作.这里的一个难点是,通过exec调用的进程需要知道应该访问哪个文件描述符.在前面的例子中,因为子进程本身有file_pipes数据的一份副本(点击打开"fork复制进程映像"链接),所以这并不成为问题.但经过exec调用后,情况就不一样了,因为原来的进程已经被新的进程替换了.为解决这个问题,可以将文件描述符(实际上它只是一个数字)作

linux的父进程向子进程发kill信号例子以及对子进程的状态进行判断

先看一个父进程向子进程发kill信号例子: #include <stdio.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> int main(int argc, const char *argv[]) { pid_t pid; int status; pid = fork(); if (0 == pid) { print

UNIX网络编程卷1 服务器程序设计范式5 预先派生子进程,由父进程向子进程传递套接字描述符

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.只让你进程调用 accept,然后把所接受的已连接套接字"传递"给某个子进程. 这样做就不用因为所有子进程都调用 accept 而需提供上锁保护 2.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程传递新的套接字 typedef struct { pid_t child_pid; /* 子进程的进程 ID */ int child_pipefd; /* 父进程中连接到该子进程

父进程和子进程

父进程 在计算机领域,父进程(英语:Parent Process)指已创建一个或多个子进程的进程. UNIX 在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程. 操作系统内核以进程标识符(Process Identifier,即PID)来识别进程.进程0是系统

父进程与子进程的关系(31-04)

一个父进程(主进程)可以生成多个子进程, 每个父进程/子进程都有一个特定的ID号. from multiprocessing import Process import timeimport os def info(title): print(title) print('module name:', __name__) print('parent process:', os.getppid()) # 显示父进程ID print('process id:', os.getpid()) # 显示子进

父进程等待子进程结束

from multiprocessing import Process import time # def task(name): # print("%s start" % name) # time.sleep(3) # # print("%s stop" % name) # # if __name__ == '__main__': # p = Process(target=task,args=("jerry",)) # p.start() #

一个关于系统父进程与子进程的理解案例

代码实例 #include<stdio.h> #include<unistd.h> /*程序输出结果 主进程id:8377 进程id:8377,父进程id:3290,插曲 进程id:8377,父进程id:3290,Bye 进程id:8378,父进程id:8377,hello 进程id:8378,父进程id:8377,Bye 进程id:8379,父进程id:1397,插曲 进程id:8379,父进程id:1397,Bye 进程id:8380,父进程id:1397,hello 进程id