1. 程式人生 > >Linux下C語言進程通訊編程

Linux下C語言進程通訊編程

col 映射 一個 標識 define [] clas 操作 style

代碼:

 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語言進程通訊編程