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 [email protected] -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)

时间: 2025-01-18 02:02:38

Linux Linux程序练习五的相关文章

Linux学习笔记(五)-Linux应用程序的安装和卸载

Linux应用程序安装概述 Windows下安装程序步骤 在program files文件夹下建立程序文件夹(Linux下的/user) copy相关动态链接库(依赖类库)到程序文件夹或者系统文件夹下,比如dll文件 copy可执行文件到程序文件夹下,比如exe文件 copy配置文件到程序文件夹或者系统文件夹下,比如Ini文件 把启动配置和程序依赖的配置放到注册表(Linux没有注册表) 如果有自定义服务程序的,注册并启动服务程序 Linux安装原理:cp类库,可执行程序,配置文件到相应目录,根

(转载)linux下的僵尸进程处理SIGCHLD信号Linux环境进程间通信(五): 共享内存(下)

Linux环境进程间通信(五): 共享内存(下) 在共享内存(上)中,主要围绕着系统调用mmap()进行讨论的,本部分将讨论系统V共享内存,并通过实验结果对比来阐述两者的异同.系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面. 系统调用mmap()通过映射一个普通文件实现共享内存.系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内

嵌入式linux应用程序调试方法

嵌入式linux应用程序调试方法 四 内存工具 17 4.1 MEMWATCH 17 4.2 YAMD 22 4.3 Electric Fence 24 五 C/C++代码覆盖.性能profiling工具 24 5.1 用gcov来测试代码覆盖率 25 5.2 使用gprof来优化你的C/C++程序 35 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来跟踪稀奇古怪的内存错误问题.应用程序在有的开发工作站上能运行,但在新的产品工作站上,这个应用

Linux安装程序Anaconda分析

1.概述 Anaconda是RedHat.CentOS.Fedora等Linux的安装管理程序.它能够提供文本.图形等安装管理方式,并支持Kickstart等脚本提供自己主动安装的功能.此外,其还支持很多启动參数,熟悉这些參数可为安装带来非常多方便.该程序的功能是把位于光盘或其它源上的数据包,依据设置安装到主机上.为实现该定制安装,它提供一个定制界面,能够实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息).Anaconda的大部分模块用Python编写,有少许的加载模块用C编写. An

嵌入式linux C++语言(五)——友元

嵌入式linux C++语言(五)--友元 面向对象编程的类的设计机制实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,是类与外部的通信接口.在实践中,类外的某些函数需要频繁地访问类的数据成员,将类外的函数定义为类的友元函数.除了友元函数外,还有友元类,两者统称为友元.友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员. 友元可以是一个函数,该函数被称为友元函数. 一.

linux系统管理命令(五)

[教程主题]:1.系统管理命令 [1.1]用户和组管理 在Linux操作系统中,任何文件都归属于某一特定的用户,而任何用户都隶属于至少一个用户组.用户是否有权限对某文件进行访问.读写以及执行,受到系统严格约束的正是这种清晰.严谨的用户与用户组管理系统.在很大程度上它保证了Linux系统的安全性.本节课将对Linux系统中重要的用户和组管理文件进行介绍,并且介绍如何使用命令行对用户和组进行管理. Linux帐号分类 用户帐号 - 用来储存单一用户的数据,你可以使用一个用户帐号,来储存某一个用户的数

嵌入式Linux裸机开发(五)——SDRAM初始化

嵌入式Linux裸机开发(五)--SDRAM初始化 一.SDRAM初始化流程 S5PV210有两个独立的DRAM控制器,一个最大支持512MB,一个最大支持1024MB,但两个控制器必须支持相同类型的内存. 根据三星S5PV210文档可知,DDR2类型内存的初始化流程如下: 1.提供稳压电源给内存控制器和内存芯片,内存控制器必须保持CLE在低电平,此时就会提供稳压电源.注:当CKE引脚为低电平时,XDDR2SEL应该处于高电平 2.根据时钟频率正确配置PhyControl0.ctrl_start

Linux运维 第五阶段(四) corosync&pacemaker

Linux运维 第五阶段(四)corosync&pacemaker 一.相关概念: 补充 { what is high Availability? A=MTBF/(MTBF+MTTR) MTBF(mean time betweenfailures平均无故障时间) MTTR(mean time to repair平均修复时间) two ways improve availability? increase MTBF to very large values reduce MTTR to very

Linux Shell常用技巧(五) awk编程

Linux Shell常用技巧(五) awk编程 十一.  awk编程:    1.  变量:    在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可以是数字.字符串.根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文.下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a =

Linux内核分析(五)----字符设备驱动实现

原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷,我们都会以虚拟的设备为例进行学习,所以大家不必害怕没有硬件的问题. 今天我们会分析到以下内容: 1.      字符设备驱动基础 2.      简单字符设备驱动实现 3.      驱动测试 l  字符设备基础 1.       字符设备描述结构 在linux2.6内核中,使用cdev结构体描述一