以编程方式检索 OS X 命令行应用程序的绝对路径

2023-12-05

在Linux上,应用程序可以通过查询轻松获取其绝对路径/proc/self/exe。在 FreeBSD 上,它更加复杂,因为您必须构建 sysctl 调用:

int mib[4];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PATHNAME;
mib[3] = -1;
char buf[1024];
size_t cb = sizeof(buf);
sysctl(mib, 4, buf, &cb, NULL, 0);

但这仍然是完全可行的。但我无法找到一种方法来确定 OS X 上命令行应用程序的这一点。如果您从应用程序包中运行,则可以通过运行来确定它[[NSBundle mainBundle] bundlePath],但由于命令行应用程序不在捆绑包中,因此这没有帮助。

(注:咨询argv[0]不是一个合理的答案,因为如果从符号链接启动,argv[0]将是该符号链接,而不是所调用的可执行文件的最终路径。argv[0]如果愚蠢的应用程序使用exec()调用并忘记正确初始化 argv,这是我在野外看到的。)


功能_NSGetExecutablePath将返回可执行文件的完整路径(无论是否为 GUI)。该路径可能包含符号链接,“..”等,但是realpath如果需要,可以使用函数来清理它们。看man 3 dyld了解更多信息。

char path[1024];
uint32_t size = sizeof(path);
if (_NSGetExecutablePath(path, &size) == 0)
    printf("executable path is %s\n", path);
else
    printf("buffer too small; need size %u\n", size);

这个函数的秘密在于,Darwin 内核在执行完之后立即将可执行路径放入进程堆栈中。envp创建进程时的数组。动态链接编辑器dyld在初始化时获取它并保留指向它的指针。该函数使用该指针。

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

以编程方式检索 OS X 命令行应用程序的绝对路径 的相关文章

  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源

随机推荐

  • 阻止用户以特定权限级别登录,然后显示警报让他们知道原因

    我正在尝试找出如何阻止用户登录我的网站 除非他们超过了特定的权限级别 我正在公开我的网站 一旦有人注册 他们就会获得许可级别 工作台 一旦我接受用户并更改权限级别 他们就可以登录 我阻止 替补 权限级别用户的方法是重定向到索引页面 他们登录
  • 包含所有特殊字符的正则表达式模式

    我想编写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符 我的正则表达式有效 但我不知道为什么它还包含所有数字 因此当我输入某些数字时它会返回错误 My code pattern to find if there is any s
  • 我必须如何配置 RMI 环境才能在“真实”网络中使用它?

    因为我不想为基于客户端 服务器的应用程序实现通信协议 所以我在两侧实现了 RMI 客户端和 RMI 服务器 以实现两个组件之间的信息交换 如果我尝试通过在同一台计算机上启动两个组件来使用我的应用程序 则一切正常 但是 如果我将组件拆分到两台
  • 写入文件 | Swi-Prolog |视窗

    某些脚本在 linux 系统上通过 swi prolog 5 11 11 运行成功 但在 Windows 系统上通过 Swi Prolog 5 6 48 运行得不太好 main open output txt write OS elemen
  • C# 泛型约束:结构数组

    我想创建一个通用约束 其中包含作为值类型 结构 数组的类型 例如 public class X
  • 如何像 Java 那样获取自 1970 年以来的当前时间戳(以毫秒为单位)

    在Java中 我们可以使用System currentTimeMillis 获取自纪元时间以来的当前时间戳 以毫秒为单位 即 当前时间与当前时间之间的差异 以毫秒为单位 世界标准时间 1970 年 1 月 1 日午夜 在C 中如何得到同样的
  • 如何截断 MySQL 数据库中的所有表?

    有没有办法在不使用 SQL 以外的任何其他语言的情况下截断特定 MySQL 数据库名称的所有表 我的意思是没有 Linux shell 脚本 为什么 因为它可以在 Windows MacOSX 和 Linux 服务器上运行 问题是客户端从控
  • 当从 Java 剪贴板对象中检索为图像时,来自 Outlook 的剪贴板副本始终设置为黑色背景

    以下是申请步骤 从 html 电子邮件或网站复制一些富文本 文本 图像的组合 在您的java代码中检索从剪贴板对象复制的内容作为BufferredImage 将检索到的图像对象保存为磁盘上的图像文件 您会注意到 在保存的文件中 图像效果很好
  • 为什么我的 win32 程序需要提升?

    我有一个非常简单的程序 用于自动更新 它检查服务器 HTTPS 上的可用版本 下载新更新并运行 可能更新的 程序 这是一个用Delphi 7编写的旧程序 在Windows 8和Windows 10下 这个程序似乎需要提升 以管理员身份运行
  • Rust 中 PhantomData 类型的使用

    我正在查看一些 Rust 源代码 发现了一种名为PhantomData 我正在浏览 Rust 文档并在互联网上进行了大量搜索 但是 我无法理解这种数据类型与 Rust 的实际用途 如果可能的话 有人可以简单地向我解释一下吗 pub stru
  • 日期倒计时器

    我正在尝试进行迄今为止的倒计时 并将每个倒计时放在 ListView 中的 ItemView 中 我已经有了Listview buillder 但我不知道如何制作具有不同值的倒计时并将它们放入列表视图中 我看到还有另一个类似的问题 但我无法
  • 粘性页脚,但只是有时

    我有一个带有页眉 内容 页脚的基本网站 我正在寻找一种设计页脚样式的方法 以便根据屏幕分辨率 如果内容没有填充页面 它会粘在底部 但如果内容溢出 它会将页脚向下推 必须滚动浏览器查看页脚 div div div div div ul li
  • “复制”不会创建动态数组的独立副本

    参考位于以下位置的在线文档http docwiki embarcadero com RADStudio XE6 en Structured Types Dynamic Arrays 写得很清楚 要制作动态数组的独立副本 请使用 Copy 函
  • 使用 ajax 请求安全地发送密码

    只是想知道 是否可以通过 Ajax 请求安全地发送密码 我有一个登录框 它调用 ajax 请求来尝试登录 通过并检索有错误的 JSON 对象 如果有 我应该使用表单重定向吗 EDIT 将加密的密码存储在数据库中并不是解决方案 因为ajax发
  • 替换由另一个矩阵索引的矩阵元素

    经过几个小时的搜索 我正在寻求您的专业知识 R 初学者 我尝试加快我的代码速度 我的目标是替换矩阵中的值A 但是 我想根据另一个矩阵的两个向量替换值B B 1 是行的名称i矩阵的A 第二栏 B 2 对应矩阵的列名A 我的代码的第一个版本是在
  • 如何在 jQuery 中获取当前日期?

    我想知道如何使用 jQuery 中的 Date 函数来获取当前日期yyyy mm dd format Date 不属于jQuery 它是 JavaScript 的特性之一 See Date 对象的文档 你可以这样做 var d new Da
  • IKVM 的 Map.xml 中的字符串和复杂数据类型!

    我正在使用 IKVM 将 java jar 文件转换为 NET dll 文件 我可以从整数类型的 getter 和 setter 创建一个属性 但我无法在 java 代码中对字符串数据类型执行此操作 您能告诉我 IKVM 的字符串或复杂数据
  • 检查 C++ 中的 double(或 float)是否为 NaN

    有 isnan 函数吗 PS 我在MinGW 如果这有影响的话 我通过使用 isnan 解决了这个问题
  • ASP.NET 中的 JQuery 与母版页

    我正在尝试将 JQuery 与一些使用母版页的 asp net 页面一起使用 并且在加载 JQuery javascript 文件时遇到问题 当我将该文件包含在母版页的标记中时 它在与母版页位于同一目录中的页面上运行良好 但是对于与母版页不
  • 以编程方式检索 OS X 命令行应用程序的绝对路径

    在Linux上 应用程序可以通过查询轻松获取其绝对路径 proc self exe 在 FreeBSD 上 它更加复杂 因为您必须构建 sysctl 调用 int mib 4 mib 0 CTL KERN mib 1 KERN PROC m