码迷,mamicode.com
首页 > 编程语言 > 详细

Linux下C语言进程通讯编程

时间:2017-10-05 23:10:12      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:通过   pre   编程   自动分配   his   enter   多个   lin   lock   

代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <sys/shm.h>
 4 /*************基本的函数API********************
 5 共享内存函数API
 6 int shmget(key_t key, int size, int flag)
 7 key:
 8     共享内存的键值,多个进程可以通过它访问同一个共享内存。常用特殊值:IPC_PRIVATE,创建当前进程的私有共享内存
 9 size:
10     指定创建共享内存的大小
11 flag:
12     操作权限
13 char * shmat(int shm_id, const void * addr, int flag)
14 shm_id:
15     要映射的共享内存标识符
16 addr:
17     指定在调用进程中映射共享内存的地址。通常取值为0,表示由系统自动分配地址。
18 flag:
19     设置共享内存的操作权限。若取值为0,表示可对共享内存进行读写操作。
20 int shmctl(int shm_id, int cmd, struct shmid_ds * buf)
21 shm_id:
22     共享内存标识符
23 cmd:
24     指定索要进行的操作:IPC_STAT IPC_SET IPC_RMID SHM_LOCK SHM_UNLOCK
25 buf:
26     结构体型指针
27 int shmdt(const void * addr)
28 **********************************************/
29 #define Test_pipe 0
30 #define Test_Shmget 0
31 #define Test_AT_w 0
32 #define Test_AT_r 0
33 #define Test_DT 1
34 int main(int argc, char *argv[])
35 {
36 #if Test_pipe
37     int x,fd[2];
38     char buf[30],s[30];
39     pipe(fd);
40     x = fork();
41     if(0 == x)
42     {
43         sprintf(buf,"This is an pipe!");
44         write(fd[1],buf,30);
45         exit(0);
46     }
47     else
48     {
49         wait(0);
50         read(fd[0],s,30);
51         printf("read: %s\n",s);
52     }
53 #endif
54 
55 #if Test_Shmget
56     int shm_id;
57     shm_id = shmget(IPC_PRIVATE,4096,0666);
58     if(shm_id < 0)
59     {
60         perror("shmget id < 0");
61         exit(0);
62     }
63     printf("成功建立共享内存区域: %d\n",shm_id);
64     system("ipcs -m");
65 #endif
66 
67 #if Test_AT_w
68     int shm_id;
69     char *shm_buf;
70     shm_id = atoi(argv[1]);
71     shm_buf = shmat(shm_id,0,0);
72     printf("写如数据到共享内存:\n");
73     sprintf(shm_buf,"对共享内存的读写操作!");
74     printf("%s\n",shm_buf);
75 #endif
76 
77 #if Test_AT_r
78         int shm_id;
79         char *shm_buf,str;
80         shm_id = atoi(argv[1]);
81         shm_buf = shmat(shm_id,0,0);
82         printf("写如数据到共享内存:\n");
83         sprintf(str,shm_buf);
84         printf("%s\n",str);
85     system("ipcs -m");
86 #endif
87 
88 #if Test_DT
89         int shm_id;
90         char *shm_buf;
91         shm_id = atoi(argv[1]);
92         shm_buf = shmat(shm_id,0,0);
93     shmdt(shm_buf);
94     shmctl(shm_id,IPC_RMID,NULL);
95     system("ipcs -m");
96 #endif
97 }

未完待续~

Linux下C语言进程通讯编程

标签:通过   pre   编程   自动分配   his   enter   多个   lin   lock   

原文地址:http://www.cnblogs.com/uestc-mm/p/7630154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!