資源簡介
本次實驗要求利用多個共享內存(有限空間)構成的環形緩沖,將源文件復制到目標文件,實現兩個進程的謄抄。

代碼片段和文件信息
#include?“head.h“
#include?
int?main(int?argc?char*?argv[])?{
//創建信號燈
int?semid;
semid?=?semget(semKey?2?IPC_CREAT|0666);
//創建共享緩沖區
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)?{
//執行P操作
P(semid?0);
size?=?fread(sBuf->data[readNum]?sizeof(char)?80?fp);?//讀取文件內容
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;?//當最后讀取內容小于80的時候結束
}?else?{
count?++;
printf(“------reading?process?have?get?a?blocking......+current_read_size:%d\n“count*80);
readNum?=?(readNum?+?1)?%?10;
}
//執行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
- 上一篇:MUI 使用原生底部欄中間凸起圖片
- 下一篇:計算機組成原理課程設計—直接插入排序
評論
共有 條評論