2015-03-13 51 views
0

對於我而言,我得到了這個「開發C程序,將輸入文件複製到輸出文件並計算讀/寫操作的次數。」我知道如何執行將輸入文件複製到輸出文件的操作,但我不完全確定如何跟蹤執行了多少個讀/寫操作。該程序應該使用不同的緩衝區大小重複複製,並輸出每個緩衝區大小執行的讀/寫操作的數量列表。我只是不確定如何做計數r/w操作的部分。怎麼能這樣做呢?先謝謝你。如何跟蹤執行了多少次讀/寫操作...?

這裏是我當前的代碼(更新):

#include <stdio.h> 
#include "apue.h" 
#include <fcntl.h> 

#define BUFFSIZE 1 

int main(void) 
{ 
    int n; 
    char buf[BUFFSIZE]; 
    int input_file; 
    int output_file; 
    int readCount = 0; 
    int writeCount = 0; 

    input_file = open("test.txt", O_RDONLY); 
    if(input_file < 0) 
    { 
     printf("could not open file.\n"); 
    } 

    output_file = creat("output.txt", FILE_MODE); 

    if(output_file < 0) 
    { 
     printf("error with output file.\n"); 
    } 


    while((n = read(input_file, buf, BUFFSIZE)) > 0) 
    { 
     readCount++; 
     if(write(output_file, buf, n) == n){ 
      writeCount++; 
     }else{ 
      printf("Error writing"); 
     } 
    } 

    if(n < 0) 
    { 
     printf("reading error"); 
    } 

    printf("read/write count: %d\n", writeCount + readCount); 
    printf("read = %d\n", readCount); 
    printf("write = %d\n", writeCount); 

} 

和文本文件:測試一二

結果是:

read/write count: 26 
read = 13 
write = 13 

Process returned 0 (0x0) execution time : 0.003 s 
Press ENTER to continue. 

我在想,寫將是12 ...但我不確定...

+0

代碼丟失的#include參數 user3629249 2015-03-13 18:49:04

+0

張貼代碼失敗後,所有的讀取,關閉文件/寫操作完成。 – user3629249 2015-03-13 18:57:44

+0

main()函數聲明返回一個int,但是代碼缺少'返回值';語句 – user3629249 2015-03-13 18:58:38

回答

0

您需要每次增加一個變量調用一個讀或寫的函數。你可以通過編寫一個包裝標準I/O函數的函數來做到這一點。如果你需要計算讀取和單獨寫入,使用單獨的變量

size_t fread_count(void *p, size_t size, size_t num, FILE *f){ 
    iocount++; 
    return fread(p, size, num, f); 
} 

iocount必須在範圍(如全球)

例如,像這樣的東西代替的fread。 一個你增加讀取和一個你增加寫入。 CNC中 ,因爲你正在使用的write()和read(),你可以很容易地使等效 功能上面一樣,但使用的寫入和讀取,而不是FWRITE和FREAD

+0

,所以如果我的測試文件包含以下內容:「test one two」 如果我使用一個變量,並且緩衝區大小爲1,應該返回什麼? @smeezekitty – PhilectorIV 2015-03-13 18:40:13

+0

這些建議的函數可能/應該有另一個參數是計數器的地址,那麼計數器就不需要是'全局'(實際上通過使用「靜態」修飾符來文件全局) – user3629249 2015-03-13 18:51:20

+0

@PhilectorIV我認爲它將是25.讀取每個字節一個,寫入每個字節一個。還有一個額外的嘗試在文件末尾讀取 – smeezekitty 2015-03-13 18:58:09

0

,以幫助嘗試不同的緩衝區大小:

1)把打開/讀/寫/關閉和炭緩衝液[],讀/寫計數器,用於計數器最終printf語句等入在主(一個單獨的函數

2)),添加表包含要嘗試的緩衝區大小。

3)調用從main()中, 新功能包括顯示緩衝區大小使用