readdir() 32/64 兼容性问题

2023-12-26

我正在尝试让一些旧的遗留代码在新的 64 位系统上运行,但目前陷入困境。下面是一个小 C 文件,我用它来测试当前正在中断的实际程序中存在的功能。

#define _POSIX_SOURCE
#include <dirent.h>
#include <sys/types.h>
#undef _POSIX_SOURCE
#include <stdio.h>

main(){
    DIR *dirp;
    struct dirent *dp;
    char *const_dir;

    const_dir = "/any/path/goes/here";

    if(!(dirp = opendir(const_dir)))
        perror("opendir() error");
    else{
        puts("contents of path:");
        while(dp = readdir(dirp))
            printf(" %s\n", dp->d_name);
        closedir(dirp);
    }
}

问题:

操作系统是Red Hat 7.0 Maipo x86_64。 遗留代码是 32 位的,并且必须保持这种方式。

我已经使用以下命令编译了程序,运行良好-m32标志与g++。出现的问题是在运行时,readdir()获取一个 64 位 inode,然后抛出一个 EOVERFLOW errno,当然什么也不会打印出来。

我尝试过使用readdir64()代替readdir()取得一些成功。我不再收到 errno EOVERFLOW,并且这些行出现在终端上,但文件本身不会被打印。我假设这是由于缓冲区不是什么dirent期望。

我尝试过使用dirent64试图缓解这个问题,但每当我尝试这样做时,我都会得到:

test.c:19:22 error: dereferencing pointer to incomplete type 
  printf(" %s\n", dp->d_name);

我想知道是否有办法手动移动dp->d_name缓冲区dirent与使用readdir()。我注意到在 Gdb 中使用readdir() and dirent结果是dp->d_name目录列于dp->d_name[1], 然而readdir64() and dirent给出第一个目录dp->d_name[8].

那或以某种方式得到dirent64去工作,或者也许我完全走在错误的道路上。

最后,值得注意的是,该程序在没有-m32包含标志,所以我假设它一定是某个地方的 32/64 兼容性错误。任何帮助表示赞赏。


感谢上面评论中的@Martin,我被引导尝试在我的代码中定义 dirent64 结构。这有效。可能有一个 #define 可用于避免将 libc .h 代码粘贴到我自己的代码中,但这目前有效。

我需要的代码位于<bits/dirent.h>

我想我还应该注意到,这使得它可以同时使用 readdir64() 和 dirent64

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

readdir() 32/64 兼容性问题 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 如何在 R 中对向量中的连续日期进行分组?

    我下面有一个日期向量 dates lt c 2018 05 16 2018 07 20 2018 06 25 2018 06 26 2018 07 21 2018 07 22 2018 05 17 我想将连续的日期分组在一起 这可以吗 即我
  • 动态修改页面内容的 IE7 相对/绝对定位错误

    我想知道是否有人知道如何解决 IE7 中的以下问题
  • 在 Mac 上将 .xls 和 .xlsx 批量转换为 .txt(制表符分隔)

    我有大约 150 个 xls 和 xlsx 文件需要转换为制表符分隔 我尝试使用 automator 但只能一一完成 不过 这绝对比单独打开每个文件要快 我的脚本知识很少 所以我希望有一种尽可能轻松地完成此操作的方法 如果您准备使用 Pyt
  • Pywinauto type_keys() 省略字符串中的“%”

    当尝试输入字符串时 customer asked for 30 discount 通过使用到一个表单type keys 在 Pywinauto 0 6 5 中 它发送的输出是 customer asked for 30 discount 省
  • 有关在我的计算机中安装 PCL 的问题

    当我尝试安装 python pcl PCL 是用于像激光雷达数据一样演示的点云库 我按照上的说明进行操作https github com strawlab python pcl https github com strawlab pytho
  • 如何使用 Google Mock 模拟模板方法?

    我正在尝试模拟模板方法 这是包含要模拟的方法的类 class myClass public virtual myClass template
  • clang++:错误:链接器命令失败,退出代码 1 Qt Android

    无法构建 Qt 示例 在 Windows 中构建时出现错误 E android ndk r20 windows x86 64 android ndk r20 toolchains aarch64 linux android 4 9 preb
  • 动态端口和 AWS 应用程序负载均衡器和 ECS

    ELB 后面的 Docker 容器获取自动注册到 ELB 的动态端口 以便它们可以将流量重定向到它们 为了使 ELB 可以访问您的 Web 服务器 您必须打开来自安全组内的所有这些端口 1024 65535 有没有办法不必向一系列端口开放安
  • fpdf - 返回上一页

    我正在使用 fpdf 生成 pdf 发票 有些发票包含很多项目 详细信息需要进入第二页 但是 我需要在第一页上显示总数和其他详细信息 现在 如果我可以添加这样的新页面 pdf gt AddPage 但是 这会将所有内容放入第二页 无论此声明
  • 如何保护应用程序池免受会话序列化异常的影响?

    我们正在使用进程外会话提供程序 ScaleOut 对于 ASP NET 应用程序 我们注意到when未正确设置反序列化的对象会无意中进入会话最终导致整个进程终止 重现和处理这个场景是更有趣的地方 终止进程的异常是在会话状态中的任何 StaO
  • ruby Enumerable#first 与 #take

    ruby 枚举 数组有什么区别first n and take n 我依稀记得take与惰性评估有关 但我不知道如何使用它来做到这一点 并且在谷歌搜索或文档中找不到任何有用的东西 take 是一个很难通过谷歌搜索的方法名称 first n
  • tf.gradients 如何管理复杂的函数?

    我正在研究复值神经网络 对于复值神经网络 通常使用 Wirtinger 微积分 那么导数的定义是 考虑到由于刘维尔定理 函数是非全纯的 如果你看广濑彰的书 复值神经网络 进展与应用 第 4 章方程 4 9 定义 当然 偏导数也是使用维廷格微
  • WooCommerce - 为某些特定用户角色启用“零税率”税级

    在 wy WooCommerce 网站中 我将销售给经销商 AND 经销商 问题是经销商免税 因此我需要一个自定义函数来为某些客户角色启用零税率 如果 WooCommerce 自己做到这一点 那将是最佳选择 但事实并非如此 所以我的问题是
  • 如何获取大页面大小的值?

    我希望直接从我的 C 代码中获取大页面大小的值 而无需运行 bash 命令 从 bash 我可以做到这一点 grep pse proc cpuinfo gt dev null echo 2M huge page size are suppo
  • 有谷歌云存储模拟器吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 出于测试目的 我想模拟 Cloud Storage 因为它会减慢测试速度 有谷歌云存储模拟器吗 谷歌有
  • 如何将视图绑定与包含的视图一起使用?

    View Binding 在 v3 6 中发布 Docs https developer android com topic libraries view binding https developer android com topic
  • QWidget / X11:防止通过鼠标单击激活/聚焦窗口

    我想用 Qt QML 开发一个系统范围的屏幕键盘 通过 xlib 注入按键事件效果很好 我现在的问题 如果单击键盘按钮 具有所选输入字段的窗口将失去焦点 因此 按键事件将不会传递到先前选择的输入字段 那么有人知道如何防止 QWidget 被
  • 待办事项列表项文本与以下列表项的文本重叠

    我使用 jQuery 和 Bootstrap 创建了一个待办事项列表 如果您在列表容器中输入的文本长度超过单行 则第一行中不适合的内容将与下一行中的现有列表项文本重叠 这是我的 CSSul and li元素 视图CodePen https
  • 如何处理要求使用 Ansible 任务输入的命令?

    我正在学习 Ansible 我想知道如何编写一个任务来处理以下命令
  • readdir() 32/64 兼容性问题

    我正在尝试让一些旧的遗留代码在新的 64 位系统上运行 但目前陷入困境 下面是一个小 C 文件 我用它来测试当前正在中断的实际程序中存在的功能 define POSIX SOURCE include