zoukankan      html  css  js  c++  java
  • 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 !
    ");
            return -1;
        }
        printf("创建共享内存区成功,共享内存区段标识符是%d
    ",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("请输入一个参数!
    ");
            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
    ", strerror(errno));
            return -1;
        }
        //数据写入进程私有共享内存区
        read(STDIN_FILENO, shmbuf, sizeof(char) * 1024);
        //关闭本进程私有共享内存区
        resid=shmdt(shmbuf);
        printf("shmdt()函数返回值是%d
    ",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("请输入一个参数!
    ");
            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 
    ");
            return -1;
        }
        printf("%s", shmbuf);
        //关闭当前进程的共享内存区
        resid = shmdt(shmbuf);
        printf("shmdt()函数返回值是%d
    ", 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("请输入一个参数!
    ");
            return -1;
        }
        int resid=0;
        int shmid=0;
        shmid=atoi(args[1]);
        resid=shmctl(shmid,IPC_RMID,0);
        printf("返回值是%d
    ",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)

  • 相关阅读:
    Asp.Net-Mvc——短信验证码
    C#-Mvc-表白墙(随机数)
    C#-折线图-从数据库中读取数据
    C#-Mvc-修改密码
    C#-Mvc-产品分页
    ECharts查询用户点击次数
    ECharts-条形图制作
    设置当前登录用户问题
    sql执行计划
    SQL中CUBE 用法
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5851095.html
Copyright © 2011-2022 走看看