編寫linux平台下的兩個c語言程式實現如下功能:
(1)x、y兩個程序相互配合實現對輸入檔案中資料的處理,並將處理結果寫入輸出檔案。
(2)x程序負責讀分塊取輸入檔案,並將輸入資料利用共享記憶體傳輸給y程序。
(3)y程序負責將讀入的資料(假定皆為文字資料)全部處理成大寫,然後寫入輸出檔案。
(4)為提高並行效率,x、y兩個程序之間建立2個共享記憶體區a、b。x讀入資料到a區,然後用linux的訊號或訊號量機制通知y程序進行處理;在y處理a區資料時,x繼續讀入資料到b區;b區資料被填滿之後,x程序通知y程序處理,自己再繼續向a區讀入資料。如此迴圈直至全部資料處理完畢。
#include
#include
#include
#include
#include
#include
#include
#include
#include
const
int buffer_size =
2048
;int
main
(int argc,
char
const
*ar**)
outputfile =
open
("./output.txt"
, o_wronly | o_creat,
0666);
// 訊號量
sem_t *sem1;
sem_t *sem2;
sem1 =
sem_open
("sem1"
, o_creat,
0666,1
);sem2 =
sem_open
("sem2"
, o_creat,
0666,0
);// 共享記憶體
// 定義交換空間結構體
struct switchbuffer
;struct switchbuffer *buffera;
// 交換空間a,b
struct switchbuffer *bufferb;
int shmaid, shmbid;
// 建立共享記憶體
shmaid =
shmget
((key_t)11,
sizeof
(buffera)
,0666
| ipc_creat)
; shmbid =
shmget
((key_t)22,
sizeof
(bufferb)
,0666
| ipc_creat)
;// 主程序讀取資料
// 子程序處理後寫入資料
pid_t cpid;
cpid =
fork()
;if(cpid <0)
else
if(cpid ==0)
write
(outputfile, buffera->buffer, buffera->flag);}
else
write
(outputfile, bufferb->buffer, bufferb->flag);}
switchflag =
!switchflag;
sem_post
(sem1);}
}else
else
switchflag =
!switchflag;
if(fileflag <=0)
break
;sem_wait
(sem1)
;sem_post
(sem2);}
sem_wait
(sem1);}
// destory
close
(inputfile)
;close
(outputfile)
;sem_close
(sem1)
;sem_close
(sem2)
;sem_unlink
("sem1");
sem_unlink
("sem2");
shmdt
(buffera)
;shmdt
(bufferb)
;shmctl
(shmaid, ipc_rmid,0)
;shmctl
(shmbid, ipc_rmid,0)
;printf
("over\n");
return0;
}
python讀取並處理CSV檔案
python讀取並處理csv檔案 import csv 將使用的檔案的名稱儲存在filename中 filename sitka weather 07 2014.csv 開啟該檔案,並將檔案物件儲存在 f 中 with open filename as f reader csv.reader f h...
python讀取大資料csv R讀取並處理較大資料
1.概述 之前在讀取和處理較大的csv資料時,在嘗試了一次直接讀取處理後發現非常耗時,就改用匯入資料庫,再通過rmysql或者rodbc來讀取處理資料。今天來比較一下。載入相關packages library data.table library dplyr library sqldf librar...
多程序分塊讀取檔案
utf 8 import urlparse import datetime import os from multiprocessing import process,queue,array,rlock 多程序分塊讀取檔案 workers 4 blocksize 100000000 file siz...