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=;
shmid=shmget(IPC_PRIVATE,sizeof(char)*,);
if(shmid==-)
{
printf("shmget() is failed !\n");
return -;
}
printf("创建共享内存区成功,共享内存区段标识符是%d\n",shmid);
return ;
}
//向共享内存区写入数据
#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 < )
{
printf("请输入一个参数!\n");
return -;
}
int shmid = ;
int resid=;
shmid = atoi(args[]);
//进程附加共享内存区
void * shmbuf = NULL;
shmbuf = shmat(shmid, , );
if (shmbuf == -)
{
printf("进程A附加共享内存区失败! error message : %s\n", strerror(errno));
return -;
}
//数据写入进程私有共享内存区
read(STDIN_FILENO, shmbuf, sizeof(char) * );
//关闭本进程私有共享内存区
resid=shmdt(shmbuf);
printf("shmdt()函数返回值是%d\n",resid);
return ;
}
#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 < )
{
printf("请输入一个参数!\n");
return -;
}
int shmid = ;
int resid = ;
shmid = atoi(args[]);
//附加到共享内存区
void * shmbuf = NULL;
shmbuf = shmat(shmid, , SHM_RDONLY);
if (shmbuf == -)
{
printf("shmat() is failed \n");
return -;
}
printf("%s", shmbuf);
//关闭当前进程的共享内存区
resid = shmdt(shmbuf);
printf("shmdt()函数返回值是%d\n", resid);
return ;
}
//关闭共享内存区
#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<)
{
printf("请输入一个参数!\n");
return -;
}
int resid=;
int shmid=;
shmid=atoi(args[]);
resid=shmctl(shmid,IPC_RMID,);
printf("返回值是%d\n",resid);
return ;
}
.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程序练习五的更多相关文章
- 第六章第一个linux个程序:统计单词个数
第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数. 第 1 步:建立 Linu x 驱 ...
- Linux内核设计第五周——扒开系统调用三层皮(下)
Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加 ...
- Linux内核分析(五)----字符设备驱动实现
原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷, ...
- 十天学Linux内核之第五天---有关Linux文件系统实现的问题
原文:十天学Linux内核之第五天---有关Linux文件系统实现的问题 有时间睡懒觉了,却还是五点多醒了,不过一直躺倒九点多才算起来,昨晚一直在弄飞凌的嵌入式开发板,有些问题没解决,自己电脑系统的问 ...
- UNIX/Linux C 程序员需要掌握的七种武器
我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...
- 编写Linux C++程序如何影响VIRT(虚存)和RES(实存/常驻内存)
转载目的,主要是为了理解lVIRT虚拟内存.RES常驻内存.共享内存SHR.SWAP和实际程序应用如何对应的. 在Linux命令行中执行top命令,可以查询到所有进程使用的VIRT虚拟内存.RES常驻 ...
- LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...
- linux内核分析第五周学习笔记
linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 嵌入式linux应用程序调试方法
嵌入式linux应用程序调试方法 四 内存工具 五 C/C++代码覆盖.性能profiling工具 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来 ...
- Linux内核分析第五周——扒开系统调用的“三层皮”(下)
Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...
随机推荐
- hadoop实战–搭建eclipse开发环境及编写Hello World
原创文章,转载请注明: 转载自工学1号馆 欢迎关注我的个人博客:www.wuyudong.com, 更多云计算与大数据的精彩文章 1.在eclise中安装hadoop的插件并配置 在上篇文章<编 ...
- 字符串匹配--Karp-Rabin算法
主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...
- C编程常见问题总结
本文是C编程中一些常见错误的总结,有些是显而易见的,有些则是不容易发现 本文地址:http://www.cnblogs.com/archimedes/p/get-screwed-c.html,转载请注 ...
- iOS Block(一)
Block使用总结: 1.格式: ReturnType (^ BlockName)(参数…); //例: int (^ BFunc) (int a, int b); 2.block赋值: block名 ...
- 网络开始---多线程---NSThread-02-线程状态(了解)(三)
#import "HMViewController.h" @interface HMViewController () @property (nonatomic, strong) ...
- iOS开发笔记5:多线程之NSThread、NSOperation及GCD
这篇主要总结下iOS开发中多线程的使用,多线程开发一般使用NSThread.NSOperation及GCD三种方式,常用GCD及NSOperation. 1.NSThread 创建线程主要有以下三种方 ...
- 关于Socket建立长连接遇到的bug信息
下面是本人在Socket连接的开发中遇到的bug总结 1."远程服务器关闭了Socket长连接'的错误信息 2.关于"kCFStreamNetworkServiceTypeVoIP ...
- ReSharper 8.XXX 注册机
今天给电脑重装系统,发现Rsharper已经更新到8.0.14.856了,于是下载新版本的,但像咱搞开发的,肯定不能用付费软件(关键是你也付不起啊,499$,499刀啊).于是在网上找相关的激活软件. ...
- Effective Java 48 Avoid float and double if exact answers are required
Reason The float and double types are particularly ill-suited for monetary calculations because it i ...
- Mongo 的相关增删改查
1,Mongod 下载安装,请看https://www.mongodb.com/download-center 2,插入语句: MongoDB后台管理 Shell 如果你需要进入MongoDB后台管理 ...