做网站需要准备资料,WordPress瀑布流商店博客,wordpress调用用户昵称,建设专业网站网络1.IPC \qquadlinux环境下#xff0c;进程的地址空间相互独立#xff0c;每个进程都有各自不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都看不到#xff0c;所以进程之间不能直接互相访问#xff0c;进程间要想交换数据只能通过内核#xff0c;在内核中开辟…1.IPC
\qquadlinux环境下进程的地址空间相互独立每个进程都有各自不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都看不到所以进程之间不能直接互相访问进程间要想交换数据只能通过内核在内核中开辟一块缓冲区进程1把数据从用户空间拷贝到内核缓冲区进程2再从内核缓冲区把数据读走内核提供的这种机制被称为进程间通信IPCinterprocess communication。 \qquad在进程间完成数据互换需要借助操作系统提供的特殊方式现在常用的有管道最简单、信号开销最小、共享映射区无血缘关系、本地套接字最稳定
2.管道
\qquad管道是一种最基本的IPC机制作用于有血缘关系的进程之间进行数据交换。其具有如下的特点 \qquad管道本质是一种伪文件实际是内核缓冲区 \qquad由两个文件描述符引用一个表示读端一个表示写端 \qquad规定从管道的写端流入数据从管道的读端流出数据 \qquad管道的原理管道通过内核使用环形队列机制借助内核缓冲区4k实现。
3.查看管道默认大小
ulimit -a结果pipe size (512 bytes, -p) 8
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14488
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14488
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited\qquad 8*512b4k \quad管道的局限性 \qquad数据不能自写自读 \qquad数据一旦被读走便在管道中消失不能反复读取 \qquad由于管道采用半双工通信方式因此数据只能在一个方向上流动。 \qquad只能在有公共祖先的进程间使用管道
4.管道交换数据的例子
#includestdio.h
#includeunistd.h
#includestdlib.h
#includestring.hint main()
{int fd[2];int ret;pid_t pid;ret pipe(fd);if(ret-1){perror(pipe error);exit(1);}pid fork();if(pid-1){perror(fork error);exit(1);}else if(pid0){ //子进程close(fd[1]);char buf[1024];ret read(fd[0],buf,sizeof(buf));//读到buf里面if(ret0){printf(读取完成\n);}write(STDERR_FILENO,buf,ret);}else{close(fd[0]);write(fd[1],hello world\n,strlen(hello world\n));}return 0;
}