c语言pread用法,学校让做个关于"模拟文件系统"的程序报告,求c的读写操作代码,只需写pread{}和pwrite{},求内行人帮助,不胜感激!!! - C/C++论坛 - 51CTO技术论坛_...

41413e7027ffa026ba737eccea21484e.gif

#include

struct linkf

{char username[16];

struct links *next;

};

struct linkr

{char name[16];

int sex;

struct linkr *next;

};

struct links

{char filename[16];

struct linkr *headlink;

int length;

struct links *next;

};

struct linkt

{char filename[16];

int flag;

int length;

struct linkr *headlink;

struct linkt *next;

};

struct linkf mfd[5];

struct links *ufd,*p2,*q2;

struct linkr *p,*q;

struct linkt *afd,*p3,*q3;

char X[16],s,username[16];

int r,i,w,n,m,j,t,flag;

void print1()

{int i,j;

printf("\n MFD:\n");

printf("----------------\n");

for(i=0;i

{printf("| %s",mfd.username);

printf("\n----------------\n");

}

}

void print2()

{int i;

for(i=0;i

if (flag==i && ufd!=NULL)

{printf("\n MFD__[%s]\n",mfd.username);

p2=mfd.next;

printf("+_UFD-Filename_+_   Length   _+\n");

while(p2!=NULL)

{printf("|%10s    |    %4d      |\n",p2->filename,p2->length);

p2=p2->next;

printf("+--------------+--------------+\n");

}

}

if(ufd==NULL) printf("\nUFD_[%s] is NULL\n",username);

if(afd!=NULL)

{p3=afd;

printf("\n\nAFD_[%s]\n",username);

printf("+-----Filename-----+----length---+\n");

while(p3!=NULL)

{printf("|%12s      |      %d      |\n",

p3->filename,p3->length);

p3=p3->next;

printf("+------------------|-------------+\n");

}

}

else printf("\n\nAFD_[%s]  is NULL\n",username);

}

void print3()

{int i;

char sex[8];

p3=afd;

printf("Input printing-filename:"); scanf("%s",X);

if(p3!=NULL)

{while((strcmp(p3->filename,X)!=0)&&(p3->next!=NULL))

p3=p3->next;

if(strcmp(p3->filename,X)!=0)

printf("The file hasn't opened!\n");

else

if(p3->headlink==NULL) printf("The file is NULL!\n");

else {p=p3->headlink; i=1;

printf("|   num    |     name       |   sex   |\n");

printf("---------------------------------------\n");

while (p!=NULL)

{if(p->sex==1) strcpy(sex,"man");

else strcpy(sex,"woman");

printf("|%5d     |%10s      | %6s  |\n",

i,p->name,sex);

i++; p=p->next;

printf("---------------------------------------\n");

}

}

} else printf("The file hasn't opened!\n");

}

void pcreate()

{ printf("Input create filename:");scanf("%s",X);

q2=ufd;

if(q2!=NULL)

{while((strcmp(q2->filename,X)!=0)&&(q2->next!=NULL))

q2=q2->next;

if(strcmp(q2->filename,X)==0)

{printf("File has already been created!\n");

return;

}

}

p2=(struct links *)malloc(sizeof(struct links));

if(ufd==NULL) ufd=p2; else q2->next=p2;

strcpy(p2->filename,X);

p2->length=0; p2->next=NULL; p2->headlink=NULL;

printf("Create File Finished!\n");

}

void popen()

{ p2=ufd;

printf("Input Open filename:");scanf("%s",X);

if(p2!=NULL)

{while((strcmp(p2->filename,X)!=0)&&(p2->next!=NULL))

p2=p2->next;

if(strcmp(p2->filename,X)==0)

{q3=afd;

if(afd!=NULL)

{while((strcmp(q3->filename,X)!=0)&&(q3->next!=NULL))

q3=q3->next;

if(strcmp(q3->filename,X)==0)

{printf("The file \"%s\" has been opened.\n",X);

return;

}

}

p3=(struct linkt *)malloc(sizeof(struct linkt));

if(afd==NULL) afd=p3; else q3->next=p3;

strcpy(p3->filename,X);

p3->length=p2->length;

p3->headlink=p2->headlink;

p3->flag=0;

p3->next=NULL;

printf("The file \"%s\"has been opened.\n",X);

return;

}

}

printf("Can't find \"%s\" file in \"%s\" USER.\n",X,username);

}

void pclose()

{if(afd!=NULL)

{printf("Input close filename:");scanf("%s",X);

q3=p3=afd;

while((strcmp(q3->filename,X)!=0)&&q3->next!=NULL)

{ p3=q3;q3=q3->next; }

if(strcmp(q3->filename,X)==0)

{ if(q3==afd) afd=q3->next; else p3->next=q3->next;

if (q3->flag==1)

{ p2=ufd;

while(strcmp(p2->filename,q3->filename)!=0&&p2->next!=NULL)

p2=p2->next;

if(strcmp(p2->filename,q3->filename)==0)

{p2->length=q3->length; p2->headlink=q3->headlink;}

}

free(*q3);

printf("\n The file is closed.\n");

return;

}

}

printf(" You hasn't opened file %s.\n",X);

}

void pdelete()

{ printf("Input filename to be deleted:");scanf("%s",X);

if(afd!=NULL)

{ p3=q3=afd;

while((strcmp(q3->filename,X)!=0)&&q3->next!=NULL)

{p3=q3;q3=q3->next;}

if(strcmp(q3->filename,X)==0)

{if(q3==afd) afd=q3->next; else p3->next=q3->next;

if (q3->flag==1)

{p2=ufd;

while(strcmp(p2->filename,q3->filename)!=0&&p2->next!=NULL)

p2=p2->next;

if(strcmp(p2->filename,q3->filename)==0)

{p2->length=q3->length; p2->headlink=q3->headlink;}

}

free(*q3);

}

}

if(ufd!=NULL)

{p2=q2=ufd;

while((strcmp(q2->filename,X)!=0)&&q2->next!=NULL)

{p2=q2; q2=q2->next;}

if(strcmp(q2->filename,X)==0)

{if(q2==ufd)

if(q2->next==NULL) ufd=NULL; else ufd=q2->next;

else p2->next=q2->next;

q=q2->headlink;

while(q!=NULL) {p=q; q=q->next; free(*p);}

free(*q2);

printf("The file is deleted!\n");

return;

}

}

printf("The filename \"%s\"is wrong!",X);

}

close()

{while (afd!=NULL)

{p3=afd; afd=afd->next; p2=ufd;

while(strcmp(p2->filename,p3->filename)!=0

&&p2->next!=NULL) p2=p2->next;

if(strcmp(p2->filename,p3->filename)==0&&p3->flag==1)

{p2->length=p3->length; p2->headlink=p3->headlink;}

free(p3);

}

}

pread()

{

}

pwrite()

{

}

main()

{ afd=NULL;  ufd=NULL;

for (i=0;i<5;i++)

{strcpy(mfd.username,"                ");

mfd.next=NULL;

}

printf("User number N(N<=5)=");scanf("%d",&n);

for(i=0;i

{w=0;

printf("User MFD username X[%d]=",i+1);scanf("%s",X);

for (j=0;j

if (strcmp(mfd[j].username,X)==0) w=1;

if(w==0) strcpy(mfd.username,X);

else

{ printf("\nThe Username has been Created!\n");i--;}

}

do

{ print1();

do

{ printf("Input user name you want to operate:");

scanf("%s",username);

for(i=0;(i

if(i>=n) {printf("Not found Username!\n");}

} while(i>=n);

t=0; flag=i; ufd=mfd.next;

do

{ printf("\n------------------------------------\n");

printf("  1--Creat    2--Open     3--Delete\n");

printf("  4--cLose    5--Read     6--Write\n");

printf("  7--disPlay  8--fileplay 9--Quit\n");

printf("------------------------------------\n");

printf("               Select[ ]\b\b");

scanf("%s",&s);

switch(s)

{case '1':pcreate();break;

case '2':popen();break;

case '3':pdelete();break;

case '4':pclose();break;

case '5':pread();break;

case '6':pwrite();break;

case '7':print2();break;

case '8':print3();break;

case '9':t=1;close();

}

mfd.next=ufd;

} while(!t);

printf("\n---------------------------------------\n");

printf("|   1--Edit other user  ,  2--Quit    |\n" );

printf("---------------------------------------\n");

printf("                Select[ ]\b\b");

scanf("%d",&m);

if(m==2) r=1;

else  r=0;

} while(!r);

}

2012-12-20 13:42

+2

版规,发帖可获2无忧币

2012-12-21 09:41

分享至:

90ed4b13fe016cebd9fe3df2ae3a899b.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值