发新话题
打印

【新手求助】关于创建共享内存的一题

【新手求助】关于创建共享内存的一题

题目:
7 j; q7 r+ x. b. F, P  建立共享内存5 _1 \1 I" a+ Z; q1 F, J
  共享内存大小:64个char
- e+ p4 F1 Q$ [) t  通过给程序带参数对共享内存进行操作
; J6 ~4 d" q+ k6 y2 `4 R' D  例如: 程序名 oo
9 h0 d* l/ y' C' E  oo c 建立共享内存  \; L; s7 \1 `7 u8 r  Y
  oo r 显示共享内存内容% E3 T, ?6 r8 d$ W2 S
  oo w 字符串 将制定字符串写入共享内存4 y2 v% V" V; l% N; v
  oo d 删除共享内存% B9 q6 H  A0 o9 Y" j! G
  
- r5 B5 {# u2 P: s& |) P- e  我是个初学者,谁能帮帮我??不胜感激      

TOP

#include <sys/types.h>
0 O( |/ n1 y( `9 q6 l5 y+ n3 t#include <stdio.h>. X8 o4 @% W1 T6 |$ @2 L
#include <sys/ipc.h>9 ]8 [% I& l3 ^' T7 A/ \5 c, _7 [2 m3 ^
#include <sys/shm.h>. B) J9 |; [: o

( `0 D0 f7 j# \, l* D+ h* |int main (int argc,char *argv[])3 X7 X. D5 H& d& X7 Y1 i
{. t% o2 T" w/ m8 v8 u1 F1 G5 _
        int shm_id;8 y1 J4 u5 f9 t( U( b* l
        key_t key;7 B: G7 s  P8 G; Y6 Y) V
        int size;5 n) C+ C$ P2 n5 ?3 z( l& t# t* A
        char *shm_addr,*head,*ptr,data[64],*str;
5 }" a# S/ K5 j% c# [        1 ?' R! M8 Y" d$ k+ K; Q( n' m" F
        size=sizeof (char) * 64;; Y* \* {/ ]3 ?' @5 y$ \. c
        switch (*argv[1])
* x: v; ]9 r7 {( \3 J4 E        {; m/ _. h! J0 N
                case 'c':
; l/ {/ S7 A/ ?8 A                                        key = ftok("/work/oo",0);
5 Z$ W+ T: o& D! S2 F8 h: [0 r                                        shm_id = shmget (key,size,IPC_CREAT|0660);( a; Z3 |, `. m; M
                                        if (shm_id==-1)9 f$ g4 V) X# ~. [
                                        {6 d3 z' n" u* o8 d9 {1 V9 m
                                                return (-1);/ g, _% G! h. S5 U! ]8 S, _" q( S' M
                                        }4 D5 h3 P( `  M$ ^- {5 R) z. a
                                        else
, J# I; B' |6 L1 [4 N; r                                            printf ("the shm_id is %d\n",shm_id);
0 P6 q* _) K$ F: n9 f3 \1 j                                        break;' [1 Q3 @$ A( j  }1 W" [9 W" t, I
                case 'r':
( m! y! o  Y# }5 G                                        6 x7 k7 P* u; Q6 l  ^' ]0 ]
                                       
; \5 ^8 s8 h" \2 k4 v& R6 g; z                                        printf ("%s\n",data);
! P: X7 _& u( ]8 P3 g( T+ m                                       
( `* s# C2 i' ^& ?                                        break;
. n. K" W& w+ s. J/ s                case 'w':
, h( b6 z8 N+ m                                        " T# e0 s1 K, y8 B$ N: D
                                        shm_addr = shmat (shm_id,0,0);" h# A! Q2 m' R% q- J% e/ G' d
                                        shm_addr = data;) N& Z1 X) M* c) L6 f9 h+ a( K
                                        while(*argv[2]!='\0')
4 d' Q& f8 q6 c/ a                                        {4 t, w! G1 E* P* A8 n$ I5 v
                                                *shm_addr = *argv[2];' ~( ~7 {3 m, Y2 o2 u! V) K
                                                shm_addr++;
; B+ ~1 ^" D% R+ r2 a9 B3 e                                                argv[2]++;
: [: k! ~7 ~- M                                        }' B( k4 v5 \3 v. s! K
                                        & B2 B/ d9 t3 _0 q, B" S' u1 V* H' f- ~
                                        printf("%s\n",data);) F6 y: Y& N3 T! ?; @
                                        break;9 j3 S- `: @7 \, ?4 o
                case 'd':) }0 c. Y  ]: R
                                        shmctl(shm_id,IPC_RMID,0);( _0 p, o6 V, W( S
                                        break;4 |; ^+ _; Q2 y
                default : printf("error\n");
# Y# H% h# |  e6 B; ~6 f        }        . o( B% a9 M+ V7 {
}
( b* l3 i- G: u- J& x
/ S6 f5 U% J  X9 Q! u/ h  b+ ?2 D- ?' ?2 d
我自己写的,为什么字符串存不入共享内存中呢??高手解答下      

TOP

好好用man看看ftok的函数用法。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题