多程序雙buffer讀取並處理

2021-10-11 12:49:33 字數 2340 閱讀 7773

編寫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...