我有一個學校項目。我必須用C編寫一個基本的虛擬機,它能夠託管一個CoreWar遊戲。我應該從二進制文件讀取,但我不允許使用fopen,fread或fseek。在沒有打開的情況下在C中讀取二進制文件
我必須使用read
,write
和lseek
。
我真的不明白我應該怎麼做,我在互聯網上發現的一切都說我必須使用fopen
「rb」模式。
我有一個學校項目。我必須用C編寫一個基本的虛擬機,它能夠託管一個CoreWar遊戲。我應該從二進制文件讀取,但我不允許使用fopen,fread或fseek。在沒有打開的情況下在C中讀取二進制文件
我必須使用read
,write
和lseek
。
我真的不明白我應該怎麼做,我在互聯網上發現的一切都說我必須使用fopen
「rb」模式。
下面是使用您需要使用的低級函數來讀取文件的完整示例。
用您自己的代碼替換註釋/* 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);
你的回答讓我明白我沒有得到。我實際上不得不打開一個特定的選項/標誌來讀取二進制文件。我只需要像其他文件一樣閱讀它。對上述問題的評論現在更有意義。感謝您的幫助。 – Henry
您可能會考慮使用mmap()來讀取文件數據。在這裏檢查這個答案:When should I use mmap for file access?
在許多情況下,這是一個不錯的選擇。 +1指出。 – George
使用'open'系統調用'O_BINARY'選項(如果你的編譯器說這個選項是未定義的,刪除它)。你是否讀過''讀'''寫'和'lseek'?提示:它們也是系統調用,因此將其添加到查詢中將有助於過濾結果。 – MikeCAT
我做過谷歌閱讀寫lseek並打開,但我沒有遇到任何像你提到的O_BINARY選項。我想我並不擅長使用Google。無論如何,感謝您的快速答案! – Henry
即使在谷歌上也試試'man read'。然後查找「另請參見」部分。 –