2016-03-10 88 views
0

我有一個學校項目。我必須用C編寫一個基本的虛擬機,它能夠託管一個CoreWar遊戲。我應該從二進制文件讀取,但我不允許使用fopen,fread或fseek。在沒有打開的情況下在C中讀取二進制文件

我必須使用read,writelseek

我真的不明白我應該怎麼做,我在互聯網上發現的一切都說我必須使用fopen「rb」模式。

+6

使用'open'系統調用'O_BINARY'選項(如果你的編譯器說這個選項是未定義的,刪除它)。你是否讀過''讀'''寫'和'lseek'?提示:它們也是系統調用,因此將其添加到查詢中將有助於過濾結果。 – MikeCAT

+0

我做過谷歌閱讀寫lseek並打開,但我沒有遇到任何像你提到的O_BINARY選項。我想我並不擅長使用Google。無論如何,感謝您的快速答案! – Henry

+0

即使在谷歌上也試試'man read'。然後查找「另請參見」部分。 –

回答

3

下面是使用您需要使用的低級函數來讀取文件的完整示例。

用您自己的代碼替換註釋/* Process the data */,該代碼對讀取的數據執行了一些有用的操作。

int rfd; /* File descriptor. */ 
    char buffer[BUFFER_SIZE]; /* Buffer to put file content into */ 
    int bufferChars; /* number of characters returned by the read function */ 

    /* Open the file */ 
    if ((rfd = open(argv[1], O_RDONLY, 0)) < 0) 
     perror("Open failed."); 

    /* Read and process the file */ 
    while (1) 
    { 
     /* Normal case --- some number of bytes read. */ 
     if ((bufferChars = read(rfd, buffer, BUFFER_SIZE)) > 0) 
     { 
      /* Process the data */ 
     } 
     else if (bufferChars == 0) /* EOF reached. */ 
     break; 
     else /* bufferChars < 0 --- read failure. */ 
     perror("Read failed."); 
    } 

    close(rfd); 
+0

你的回答讓我明白我沒有得到。我實際上不得不打開一個特定的選項/標誌來讀取二進制文件。我只需要像其他文件一樣閱讀它。對上述問題的評論現在更有意義。感謝您的幫助。 – Henry

相關問題