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程序练习五的主要内容,如果未能解决你的问题,请参考以下文章

为什么程序猿都应该学点linux命令?

学习linux-基础五(权限管理练习题)

初学Linux五单元的比较好的练习

老男孩Linux Crond定时任务练习题

linux 5-9单元练习

Linux小练习进度条程序