基本课程设计要求如下:
多进程读写文件
实现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