fork mmap 共享映射区
来源:互联网 发布:历年乘用车销量数据 编辑:程序博客网 时间:2024/06/16 17:47
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
#include <unistd.h>
pid_t fork(void);
fork 调用失败则返回-1
//fork 创建一个子进程#include <stdio.h>#include <unistd.h>int main(void){pid_t pid;pid = fork();if(pid == 0){printf("child\n");} else {printf("parent\n");}return 0;}/*$ ./forkparentchild*/<pre name="code" class="cpp">/*creat parent child*/#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(void){pid_t pid;char *message;int n;pid = fork();if(pid == -1){perror("fork error");exit(1);}else if(pid == 0){printf("i'am child, pid = %d\n", getpid());printf("parent id = %d\n", getppid());}else if(pid > 0){printf("parent, pid = %d\n", getpid());}return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/20140828_fock$ ./4parent, pid = 7034i'am child, pid = 7035parent id = 7034*/<pre name="code" class="cpp">/*creat 5 child循环创建5个子进程*/#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(int argc, char *argv[]){int n = 5, i; //默认创建5个子进程if(argc == 2){n = atoi(argv[1]);}for(i = 0; i < n; i++){ //出口1,父进程专用出口if(fork() == 0) break; //出口2,子进程出口,i不自增}if(n == i){sleep(i);printf("parent. pid = %d\n", getpid());}else {sleep(i);printf("%d child. pid = %d\n", i+1, getpid());}return 0;}/*akaedu@akaedu-G41MT-D3:~/lin/20140828_fock$ ./61 child. pid = 74482 child. pid = 74493 child. pid = 74504 child. pid = 74515 child. pid = 7452parent. pid = 7447*/
//父子进程共享打开的文件,建立的映射区//不共享:.data malloc stack heap 命令行参数 全局变量 #include <stdio.h>#include <stdlib.h>#include <unistd.h>int a = 100;int main(void){pid_t pid;pid = fork();if(pid == 0){//suna = 2000;//子进程修改了a值,父进程不共享修改printf("child, a = %d\n", a);} else {sleep(1);//保证sun先运行printf("parent, a = %d\n", a);}return 0;}/*akaedu@akaedu-G41MT-D3:~/桌面/T74_system/0828_chp3_process_environ_control$ ./fork_shared child, a = 2000parent, a = 100*/
/****推荐****//*父子进程映射区共享/dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#define N 4int main(void){int *p;pid_t pid;int fd = open("/dev/zero", O_RDWR); p = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);if(p == MAP_FAILED){//注意:不是p == NULLperror("mmap error");exit(1);}close(fd); //映射完就可以关闭fdpid = fork();//创建子进程if(pid == 0){*p = 2000;printf("child, *p = %d\n", *p);} else {sleep(1);printf("parent, *p = %d\n", *p);}munmap(p, N);//释放映射区return 0;}/*akaedu@akaedu-G41MT-D3:~/桌面/T74_system/0828_chp3_process_environ_control$ ./fork_map_anon child, *p = 2000parent, *p = 2000*/<pre name="code" class="cpp">//父子进程共享打开的文件,建立的映射区 //方法较老,不推荐#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>int var = 100;int main(void){int *p;pid_t pid;int fd;fd = open("temp", O_RDWR|O_CREAT|O_TRUNC, 0644);if(fd < 0){perror("open error");exit(1);}unlink("temp");//删除临时文件目录项lseek(fd, 3, SEEK_SET);//open的文件长度0,不能直接建映射区write(fd, "a", 1);//引起IO操作,物理上拓展文件p = (int *)mmap(NULL, 4, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);if(p == MAP_FAILED){//注意:不是p == NULLperror("mmap error");exit(1);}close(fd);//映射区建立完毕,即可关闭文件pid = fork();//创建子进程if(pid == 0){*p = 2000;var = 1000;printf("child, *p = %d, var = %d\n", *p, var);} else {sleep(1);printf("parent, *p = %d, var = %d\n", *p, var);}munmap(p, 4);//释放映射区return 0;}/*akaedu@akaedu-G41MT-D3:~/桌面/T74_system/0828_chp3_process_environ_control$ ./fork_mmap child, *p = 2000, var = 1000parent, *p = 1627389952, var = 100*/
0 0
- fork mmap 共享映射区
- mmap 共享 内存映射
- 共享内存操作,mmap映射
- linux共享存储映射mmap
- 【IPC】Posix共享内存区与mmap内存映射
- mmap映射区和shm共享内存的区别总结
- 共享内存—内存映射mmap
- 共享内存—内存映射mmap
- 共享内存映射之mmap()函数详解
- 共享内存映射之mmap()函数详解
- linux 共享内存—内存映射mmap
- 共享内存映射之mmap()函数详解
- 基于mmap/munmap内存共享映射机制
- 共享内存映射之mmap()函数详解
- mmap/shm_open 映射进程间共享文件
- 共享内存—内存映射mmap
- 共享内存—内存映射mmap
- 共享内存映射之mmap()函数详解
- windows phone 8 异步访问独立存储区
- python 列表推导
- 对菜鸟开发者的叮咛:花一万个小时练习 Coding,不要浪费一万小时无谓地 Debugging
- 持续集成的成功要素
- Transactions and Consistency
- fork mmap 共享映射区
- Ext JS 5的声明式事件监听
- Oracle Flashback之flashback table
- QT 写XML文件
- 解决asp.net 的textbox设置成readonly就拿不到内容的问题
- DMA及cache一致性
- 计算机网络学习--网络分析
- exit _exit
- 浅谈安卓模拟器比较(一)