ファイルシステムは、/proc/
カーネルによって維持される「幻想」であり、疑似ファイル (ほとんど) のサイズをわざわざ与えることはありません (その「実際の」サイズを計算するには、通常、テキストの疑似ファイルのコンテンツ全体を構築する必要があるため)。また、ほとんどの [疑似] テキスト ファイルは/proc/
、適切なサイズ (たとえば 1K) のブロックで、最初のバイトから最後のバイトまで (つまり、EOF まで) 順番に読み取られることを期待しています。詳細については、 proc(5)のマニュアル ページを参照してください。
したがって、単一の syscall ( stat (2)など)で(/proc/self/maps
またはのようなファイルの) 真のサイズを取得する方法はありません。 )。これらのテキスト ファイルを読み取る一般的な方法は、次のようになります。/proc/sys/net/ipv4/ip_forward
FILE* f = fopen("/proc/self/maps", "r");
// or some other textual /proc file,
// e.g. /proc/sys/net/ipv4/ip_forward
if (f)
{
do {
// you could use readline instead of fgets
char line[256];
memset (line, 0, sizeof(line));
if (NULL == fgets(line, sizeof(line), f))
break;
// do something with line, for example:
fputs(line, stdout);
} while (!feof (f));
fclose (f);
}
もちろん、一部のファイル ( など /proc/self/cmdline
) には、NULバイトが含まれている可能性があると記載されています。あなたはfread
それらのためにいくつか必要になります.