2013-01-15 20 views
-4
#include <fcntl.h> 
#include <stdio.h> 
#include <string.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main (int argc, char* argv[]) 

{ 

    char* filename = argv[1]; 

    /* Open the file for writing. If it exists, append to it; 

    otherwise, create a new file. */ 

    int fd = open (filename, O_RDONLY | O_CREAT | O_APPEND, 0666); 

// Reading file probleme 

    close (fd); 

    return 0; 

} 

我的問題是,我真的找不到如何讀取緩衝區。我只在文件中輸入內容,但是如何從中讀取到該緩衝區?我找不到實現該功能的功能。低級讀取文件

+1

在我看來,你的問題將通過閱讀教程來解決。 – sashoalm

+1

嘗試:'man 2 read' – asveikau

回答

1

您正在查找的功能稱爲「讀取」。但是,您必須先將它分配給您之前分配的緩衝區。像這樣的東西應該工作:

if (fd) { 
    char buffer[1024]; 
    int n = read(fd, buffer, 1024); 

    /* ... */ 
} 

該電話後,正將包含從FD(或者爲0,無或小於0,如果發生錯誤)讀取的字節數。

如果在該文件中具有原始整數,可以接着有點訪問它們是這樣的:

int *ibuffer = (int*)buffer; 

ibuffer是然後將含有第一n /的sizeof長度1024 /的sizeof(int)的的整數數組(int)fd中的連續整數。嚴格地說,這不是非常合法的C語言,但是最近我還沒有看到過這種架構沒有用的架構。

+0

如果我有更多的然後1024我需要做一個新的閱讀,我會分配在另一個緩衝區?整數以二進制形式表示。 – user1922551

+0

如果你在循環中做了read()並用malloc()動態分配'buffer',那麼最好用realloc()增加它的大小。但是,如果你以前從未這樣做過,那麼這個過程可能會相當嚇人。然而,根據您要運行此程序的體系結構,您應該可以將緩衝區的大小增加到大約8 mibibytes - 即(8 * 1024 * 1024)。 (當時我已經做了一些測試,那是什麼時候開始出錯了。) – Magnus

0

您是否將int表示爲字符串或字節?如果字符串只是在緩衝區上使用sscanf來讀取它。對於字節表示,您可以只讀取緩衝區中的原始字節。

+0

我只能使用低級函數將其作爲一個更大問題的示例問題。它的整數。 – user1922551

+0

@ user1922551你是什麼意思「低級別」功能?使用read()將內容讀入緩衝區,並使用sscanf從該緩衝區讀取int。 –

+0

@ user1922551:低級是一件非常主觀的事情。 read()系統調用對於其他人來說是非常高層次的但是低層次的。 – 2013-01-15 18:13:07