使用write()
系统调用打印目录列表时遇到一些问题。我需要在不使用 printf
或 fprintf(stdout)
的情况下打印此内容。这是我的代码:
#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;
}
这是我的输出(mac os/Users/文件夹):
...!("((
.localized"(∞R Shared∞R €€€(vackdaled..!("((
.localized"(∞R Shared∞R €€€(vackdaled.localized"(∞R Shared∞R €€€(vackdaledShared∞R €€€(vackdaledvackdaled
但是如果我使用printf
函数,结果是这样的:
.
..
.localized
Shared
vackdale
最佳答案
您需要将字符串的长度传递给写入函数,而不是缓冲区的大小。
尝试使用 strlen(ent->d_name)
代替 sizeof(ent->d_name)
。
关于c - 为什么 write(fileno(stdout)) 不能与 ent->d_name 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676057/