Linux Linux程序练习五
Posted 庖丁解牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Linux程序练习五相关的知识,希望对你有一定的参考价值。
题目:编写两个进程a和b,利用共享内存技术,a向共享内存写字符串,b将从共享内存中读到的字符串在屏幕上打印出来。
//创建共享内存区 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int arg,char *args[]) { //创建内存共享区 int shmid=0; shmid=shmget(IPC_PRIVATE,sizeof(char)*1024,0666); if(shmid==-1) { printf("shmget() is failed !\\n"); return -1; } printf("创建共享内存区成功,共享内存区段标识符是%d\\n",shmid); return 0; }
//向共享内存区写入数据 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/shm.h> int main(int arg, char *args[]) { if (arg < 2) { printf("请输入一个参数!\\n"); return -1; } int shmid = 0; int resid=0; shmid = atoi(args[1]); //进程附加共享内存区 void * shmbuf = NULL; shmbuf = shmat(shmid, 0, 0); if (shmbuf == -1) { printf("进程A附加共享内存区失败! error message : %s\\n", strerror(errno)); return -1; } //数据写入进程私有共享内存区 read(STDIN_FILENO, shmbuf, sizeof(char) * 1024); //关闭本进程私有共享内存区 resid=shmdt(shmbuf); printf("shmdt()函数返回值是%d\\n",resid); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> //从共享内存区读数据 #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/shm.h> int main(int arg, char *args[]) { if (arg < 2) { printf("请输入一个参数!\\n"); return -1; } int shmid = 0; int resid = 0; shmid = atoi(args[1]); //附加到共享内存区 void * shmbuf = NULL; shmbuf = shmat(shmid, 0, SHM_RDONLY); if (shmbuf == -1) { printf("shmat() is failed \\n"); return -1; } printf("%s", shmbuf); //关闭当前进程的共享内存区 resid = shmdt(shmbuf); printf("shmdt()函数返回值是%d\\n", resid); return 0; }
//关闭共享内存区 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int arg,char *args[]) { if(arg<2) { printf("请输入一个参数!\\n"); return -1; } int resid=0; int shmid=0; shmid=atoi(args[1]); resid=shmctl(shmid,IPC_RMID,0); printf("返回值是%d\\n",resid); return 0; }
.SUFFIXES:.c .o CC=gcc SRCS1=createshm.c SRCS2=wra.c SRCS3=rdb.c SRCS4=rmshm.c OBJS1=$(SRCS1:.c=.o) OBJS2=$(SRCS2:.c=.o) OBJS3=$(SRCS3:.c=.o) OBJS4=$(SRCS4:.c=.o) EXEC1=firsts EXEC2=nexts EXEC3=lasts EXEC4=lasts2 start:$(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(CC) -o $(EXEC1) $(OBJS1) $(CC) -o $(EXEC2) $(OBJS2) $(CC) -o $(EXEC3) $(OBJS3) $(CC) -o $(EXEC4) $(OBJS4) @echo "^_^-----OK-----^_^" .c.o: $(CC) -Wall -g -o $@ -c $< clean: rm -f $(OBJS1) rm -f $(OBJS2) rm -f $(OBJS3) rm -f $(OBJS4) rm -f $(EXEC1) rm -f $(EXEC2) rm -f $(EXEC3) rm -f $(EXEC4)
以上是关于Linux Linux程序练习五的主要内容,如果未能解决你的问题,请参考以下文章