2016-04-17 4 views
-1

write() syscallを使用して、ディレクトリリストの印刷に問題があります。 printfまたはfprintf(stdout)を使用せずにこれを印刷する必要があります。 なぜwrite(fileno(stdout))がent-> d_nameで動作しないのですか?

...!("((
.localized"(∞R Shared∞R €€€(vackdaled..!("((
.localized"(∞R Shared∞R €€€(vackdaled.localized"(∞R Shared∞R €€€(vackdaledShared∞R €€€(vackdaledvackdaled 

しかし、私は printf機能を使用する場合、それは次のように判明:

#include <dirent.h> 
#include <stdio.h> 

int main (void) { 
    DIR *dir; 
    struct dirent *ent; 
    char directory[256] = "/Users"; 
    dir = opendir(directory); 

    while (ent=readdir(dir)) { 
     write(fileno(stdout), ent->d_name, sizeof(ent->d_name)); 
    } 
    closedir(dir); 
    return 0; 
} 

そして、ここでは私の出力は、(マックOS /ユーザ/フォルダ)である:ここに私のコードです

. 
.. 
.localized 
Shared 
vackdale 

答えて

2

バッファのサイズではなく、文字列の長さを書き込み関数に渡す必要があります。

sizeof(ent->d_name)の代わりにstrlen(ent->d_name)を試してください。

関連する問題