好文档 - 专业文书写作范文服务资料分享网站

操作系统实验报告线程并发拷贝程序

天下 分享 时间: 加入收藏 我要投稿 点赞

pfile = (char *)malloc(PSIZE*sizeof(char));/*申请模拟管道用的内存空间*/

if(pfile==NULL)/*申请可能不成功*/ {

printf(\ return -1; }

for(i=0;i

if(file[i].f_count!=1) {

file[i].f_flag = 'r';/*读标志*/ _inode = 0;/*读对应pipecb3575表下标*/

file[i].f_count = 1;/*file[0]这个表项在被使用,不可再分配*/ file[i].f_offset = 0;/*读指针*/ u_ofile3575[a[0]] = i;/*读端*/ break; } }

for(i=0;i

if(file[i].f_count!=1)

{

file[i].f_flag = 'w';/*写标志*/

_inode = 0;/*写对应pipecb3575控制块下标*/

file[i].f_count = 1;/*file[1]这个表项在被使用,不可再分配*/ file[i].f_offset = 0;/*写指针*/ u_ofile3575[a[1]] = i;/*写端*/ break; } }

if(i>=NFILE) {

printf(\ return -1; }

for(i=0;i

if(pipecb3575[i].p_count==0) {

pipecb3575[i].p_addr = pfile;/*给管道文件基地址赋值*/ pipecb3575[i].p_size = PSIZE;/*管道文件大小*/

pipecb3575[i].p_count = 2;/*读写都在进行,此pipecb3575表项不可再分*/

file[u_ofile3575[a[0]]].f_inode = i; file[u_ofile3575[a[1]]].f_inode = i; break; } }

if(i>=NPIPE) {

printf(\ return -1; }

printf(\ return 0;/*分配成功*/ }

/*关闭管道*/

int close_simulate3575(int a[]) {

printf(\ char *p; int i;

for(i=0;i<2;i++) {

p=pipecb3575[file[u_ofile3575[a[i]]].f_inode].p_addr;

/*

if(p!=NULL)

free(p); _inode].p_count = 0; /*管道控制块计数清零*/ file[u_ofile3575[a[i]]].f_count = 0; /*file表项计数清零*/ u_ofile3575[a[i]] = -1; /*u_ofile3575表项清空*/ a[i] = -1; /*fdp[]清空?*/ }

printf(\ return 0; }

/*写管道*/

int numwrite_simulate3575;

int write_simulate3575(int fd,char *ca,int n)_inode;/*读管道对应的pipecb3575表的下标*/

int n1 = n;/*一次应该写入的字符个数*/ int wstart = 0;/*计数器,写入字符个数*/ int i = 0;

for(i;i

if((file[i].f_flag=='r')&&(file[i].f_inode==pf)) {

r = i;

break; } else {

continue; } }

printf(\

pthread_mutex_lock(&lock);/*互斥锁,相当于进入临界区*/ offr = file[r].f_offset;/*赋值读指针*/ offw = file[w].f_offset;/*赋值写指针*/ if((offw+n1-PSIZE)>offr)/*不能一次写完*/ {

if(pipecb3575[pf].p_count==0)/*对文件的复制操作已进行结束,管道文件被释放*/ {

printf(\对文件的复制操作已进行结束,管道文件被释放\\n\ return 0; } else {

m = PSIZE+offr-offw;/*最多可写入数*/

9v1ea4jg8n79c964hjsm5kaxd91bwp00kvw
领取福利

微信扫码领取福利

微信扫码分享