标签:通过 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 }
未完待续~
标签:通过 pre 编程 自动分配 his enter 多个 lin lock
原文地址:http://www.cnblogs.com/uestc-mm/p/7630154.html