企业网站建设排名资讯,帝国行业网站模板,服务器在国外未备案网站,jsp是网站开发语言吗1共享内存实例01主要内容 上一小节小哥跟大家介绍了一下共享内存的知识#xff0c;今天主要是做一个实战的演示#xff0c;从而更好的理解共享内存的原理和实际应用。02程序示例 1#include stdlib.h2#include stdio.h3#include string.h4#inclu… 1共享内存实例01主要内容 上一小节小哥跟大家介绍了一下共享内存的知识今天主要是做一个实战的演示从而更好的理解共享内存的原理和实际应用。02程序示例 1#include stdlib.h2#include stdio.h3#include string.h4#include errno.h5#include unistd.h6#include sys/stat.h7#include sys/types.h8#include sys/ipc.h9#include sys/shm.h
10
11
12int main(int argc,char **argv)
13{
14 int shmid;
15 char *Send_addr NULL;
16 char *Recv_addr NULL;
17
18 if(argc ! 2)
19 {
20 printf(Param Number over!\n);
21 exit(1);
22 }
23
24
25 if((shmidshmget(IPC_PRIVATE,1024,S_IRUSR|S_IWUSR))-1)
26 {
27 printf(create share memory Fail!\n);
28 exit(1);
29 }
30
31
32 if(fork())
33 {
34 Send_addr shmat(shmid,0,0);
35 memset(Send_addr ,\0,1024);
36 printf(Send string:%s\n,argv[1]);
37 strncpy(Send_addr ,argv[1],strlen(argv[1]));
38 wait(NULL);
39 exit(0);
40 }
41 else
42 {
43 sleep(1);// syn
44 Recv_addr shmat(shmid,0,0);
45 printf(Receive string: %s\n,Recv_addr);
46 exit(0);
47 }
48}
03实验现象 04程序解读 以上提供的共享内存实例比较简单不过可以非常好的理解共享内存。首先使用shmget创建一块共享内存然后通过fork命令创建一个子进程其中父子进程都通过shmat完成用户空间与共享内存的映射从而分别获得对应的指针Send_addr和Recv_addr。父进程通过使用Send_addr内存指针把程序命令行参数写入到内存中而子进程通过Recv_addr内存指针进行访问获得父进程向共享内存中写入的参数1024-4096字符串。然而使用fork创建进程返回后其父子进程执行是无序的同时访问共享内存的非原子性所以子进程通过使用sleep(1)延时来使得父子进程任务错开访问共享内存。2最后这里小哥就介绍了使用共享内存的一些知识点 希望能够对你有帮助今天就分享到这里下期精彩见推荐阅读
专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈
关注公众号后台回复「1024」获取学习资料网盘链接。
欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~
嵌入式Linux微信扫描二维码关注我的公众号