操作系统课程设计

基本课程设计要求如下:
多进程读写文件
实现n个进程读写同一个文件all.txt,每个进程都可以读文件,也可以写文件。
进程写文件时只能向文件追加一行,追加内容是“I’m the writer number X. It is TIME.”,其中X时pid,TIME是访问文件的时间,格式为hh-mm-ss-ddd;
进程读文件时,读出文件的最后一行内容的pid和TIME,并在屏幕上输出这两项内容及读进程的pid。
进程的读写操作随机,操作之间的时间1-10单位时间随机。多进程读写不互斥,读写,写写要互斥。

//代码只有主函数的,想要其他代码可以私聊qq 3184755405
int main()
{
    pid_t pid;
    int i;
    int n,r;
    int m;
    int p,c;
    int count=0;
    int len;
    char input[size];
    printf("\t");
    printf("*********************************************************\n");
    printf("\t");
    printf("*");
    printf("\t      -----------操作系统----------\t\t");
    MyPrint();
    printf("\t      -------多进程读写文件--------\t\t");
    MyPrint();
    printf("\t      请选择:\t\t\t\t\t");
    MyPrint();
    printf("\t      (1)我自己创建n个进程(按1)\t\t");
    MyPrint();
    printf("\t      (2)由系统随机创建n个进程(按2)\t\t");
    MyPrint();
    printf("\t      (3)结束(按3)\t\t\t\t");
    MyPrint();
    printf("********************************************************\n");
    while(1)
    {
        printf("请输入:");
        scanf("%s",input);
        len=strlen(input);
        if(input[0]=='1'&&len==1)
        {
            printf("请输入需要创建的进程个数:");
            scanf("%d",&c);
            n = c;
            break;
        }
        if(input[0]=='2'&&len==1)
        {
            srand((unsigned)time(NULL));
            n = rand()%10+1;
            printf("系统随机创建进程,进程的个数为:%d\n",n);
            break;
        }
        if(input[0]='3'&&len==1)
        {
            exit(0);
            return 0;
        }
        if(len>1)
        {
            printf("输入出错,重新输入\n");
        }
    }

    for(i=0;i<n;i++)
    {
        pid=fork();
        if(pid==0)
            break;
    }
    if(pid==0)
    {
        while(count<=20)
        {
            srand(count);
            r=rand()%2;
            m = getpid();
            usleep(1234567);
            if(r==0)
            {
                printf("ReadPid is :%d\n",m);
		//printf("%d\n",m);
                open_and_readfile();
            }
            else
            {
                open_and_writefile(m);
            }
            count++;
        }
    }
    else
    {
        m = getpid();
        open_and_writefile(m);
    }
    return 0;
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述
创建了两个进程,随机读,随机写,符合课程设计的需求。然后看一哈all.txt
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值