2016-10-13 5 views
0

私は検索しましたが、mmapの使い方を見つけることができません。これは私が持っているものです。mmapをcで使う方法

char *pchFile; 
if ((pchFile = (char *) mmap (NULL, fileSize, PROT_READ, MAP_SHARED, fd, 0)) == (char *) -1){ 
    fprintf(stderr, "Mmap Err: \n"); 
    exit (1); 
} 

これで、ファイルからpchFileを取得する方法はありますか? pchFileは、mmapからマップされたバイトの配列ですか? 400バイトのようなオフセットでどのように読み込むのですか?オフセットを設定して一定量だけ読み取ることができますか?たとえば、100バイトしか読み取れませんか?

答えて

1

pchFileは、単なる古くさいchar *です(有効なバイト数はfileSizeです)。したがって、データへのポインタを400バイトのオフセットにしたい場合は、暗黙的または明示的なポインタ算術には&pchFile[400]またはpchFile + 400を使用できます。

どのように100バイトに制限するかは、使用しているAPIに基づいています。 C自体にはポインタの長さという概念はありません(NUL終端文字列のAPIがありますが、生のファイルデータは有用な場所にNULを持たない可能性があります)。 memcpy/memcmpと友だちの場合は、&pchFile[400]を送信元にして、サイズを100として渡します。 C++ vectorを初期化するには、コンストラクタへの開始ポインタと終了ポインタを渡します。 std::vector<char> myvec(&pchFile[400], &pchFile[500]);などです。通常は、開始ポインタと長さ、または開始ポインタと終了ポインタのいずれかになります。

関連する問題