資源簡介
本次實驗要求利用多個共享內(nèi)存(有限空間)構(gòu)成的環(huán)形緩沖,將源文件復(fù)制到目標文件,實現(xiàn)兩個進程的謄抄。

代碼片段和文件信息
#include?“head.h“
#include?
int?main(int?argc?char*?argv[])?{
//創(chuàng)建信號燈
int?semid;
semid?=?semget(semKey?2?IPC_CREAT|0666);
//創(chuàng)建共享緩沖區(qū)
int?shmid;
shmid?=?shmget(shmKey?sizeof(shareBuf)?IPC_CREAT|0666);
shareBuf?*sBuf?=?(shareBuf?*)shmat(shmid?NULL?0);
int?count?=?0;
//讀文件
FILE?*fp;
if((fp?=?fopen(argv[0]?“rb“))?==?NULL)?{
perror(“file?open?error\n“);
exit(1);
}
printf(“Prepare?to?get\n“);
int?readNum?=?0;
int?size;
while(sBuf->over?!=?1)?{
//執(zhí)行P操作
P(semid?0);
size?=?fread(sBuf->data[readNum]?sizeof(char)?80?fp);?//讀取文件內(nèi)容
sBuf->length[readNum]?=?size;
if(size?80)?{
printf(“------reading?process?have?get?a?blocking......+current_read_size:%d\n“count*80+size);
sBuf->over?=?1;?//當最后讀取內(nèi)容小于80的時候結(jié)束
}?else?{
count?++;
printf(“------reading?process?have?get?a?blocking......+current_read_size:%d\n“count*80);
readNum?=?(readNum?+?1)?%?10;
}
//執(zhí)行V操作
V(semid?1);
sleep(0.1);
}
fclose(fp);
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-12-12?12:08??文件謄抄實驗\
?????文件????????7908??2018-12-12?12:06??文件謄抄實驗\copy-test1
?????文件????????7756??2018-12-12?11:59??文件謄抄實驗\get
?????文件????????1082??2018-12-12?11:58??文件謄抄實驗\get.c
?????文件????????1071??2018-12-12?11:57??文件謄抄實驗\head.h
?????文件????????7720??2018-12-12?12:00??文件謄抄實驗\main
?????文件????????1028??2018-12-12?12:00??文件謄抄實驗\main.c
?????文件????????7720??2018-12-12?11:59??文件謄抄實驗\put
?????文件????????1333??2018-12-12?11:58??文件謄抄實驗\put.c
?????文件????????1063??2018-12-12?12:07??文件謄抄實驗\source-copy.txt
?????文件????????1063??2018-12-10?13:38??文件謄抄實驗\source.txt
?????文件????????7908??2018-12-10?15:34??文件謄抄實驗\test1
評論
共有 條評論