c - 为什么 write(fileno(stdout)) 不能与 ent->d_name 一起使用?

标签 c macos

使用write()系统调用打印目录列表时遇到一些问题。我需要在不使用 printffprintf(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/

相关文章:

xcode - Mac OSX 10.8.4 上带有 GLFW3 的现代 OpenGL - 缺少 glGenVertexArrays() 和 glBindVertexArray()?

macos - 为什么我在 MacOS 中收到 Screen is terminating 错误

ios - 关联对象与属性与实例变量之间的区别

c - 没有结果!!使用 fork() 使用 dup2 运行带有 2 个管道的 execlp()

objective-c - 如何将我的应用程序设置为始终以 root OSX 身份运行

mysql - phpmyadmin 无法在初始安装时登录 (mac osx)

c - 冒泡排序二维数组

C 与系统函数同名的全局变量会导致段错误吗?

C程序执行: Does it run in a process or a thread?

c - 非常简单的 C 程序不能用 VC 64 编译