0

このように使用できますreaddir_rか?仕様には何も見つかりませんが、盲目なだけかもしれません...

readdir_r(dir, entry, &entry);
4

1 に答える 1

3

これはreaddir_rあり、2番目の引数は構造体dirent自体ではなく、struct direntへのポインターであり、3番目の引数はstruct direntへのポインターへのポインターであり、structdirentのアドレスまたはend-ofの場合はNULLを受け取ります。 -ディレクトリ。使用法は次のようなものです

struct dirent* pentry = malloc(offsetof(struct dirent, d_name) +
                             pathconf(dirpath, _PC_NAME_MAX) + 1);
if (!pentry)
    out_of_memory();

for (;;){
   struct dirent* result;
   readdir_r(dirp, pentry, &result); // you can check the return code, but it only fails if dirp is invalid
   if( !result )
       break;
   // process result
}
free(pentry);

Hristoが上で指摘したように、引数は値で渡されるため、2番目の引数(pentry)のアドレスを3番目のarg(つまり、&pentry)として渡すことができます。これはreadir_rには影響しません。これはわかりません。ただし、ディレクトリの最後に到達すると、pentryにNULLが格納されますが、それが指すmallocedバッファを解放するには、pentryの値が必要です。したがって、2番目の引数のアドレスの使用が許可されているかどうかを忘れてください...そうすることは無意味で誤解を招き、メモリリークが発生します。

readdir_rの仕様については、 http: //www.kernel.org/doc/man-pages/online/pages/man3/readdir.3.html または http://pubs.opengroup.org/onlinepubs/009695399/functionsを参照してください。 /readdir.html

于 2012-06-19T16:45:08.120 に答える