Tag: macos

libdtrace缓冲输出

我试图通过libdtrace使用dtrace(在Snow Leopard上; 10.6.4)。 我想在我自己的程序中捕获我的dtrace脚本的打印输出。 一种方法是将输出转到临时文件并从那里读取。 但是,libdtrace支持一个回调函数来直接捕获我更喜欢的输出。 我假设回调只会传递我可以使用的格式化字符串,但似乎并非如此。 例如,在下面的测试程序中,我希望打印输出为“process pid = 86138”。 但是,它始终打印出“process pid = 1”(当使用’dtrace -n’运行时,dtrace脚本正常工作)。 我究竟做错了什么 ? 我应该如何使用传递给缓冲区处理程序的数据? (具体来说,来自printf和tracemem动作的数据是我感兴趣的)。 #include #include #include #include #include #include #include #include #include static const char *g_prog = “pid86138::write:entry” “{” ” printf(\”process pid = %d\\n\”, pid);” “}”; static int dcmdbuffered(const dtrace_bufdata_t *bufdata, void *arg) { if((bufdata->dtbda_recdesc != NULL) && […]

libusb_claim_interface在Mac OS X Mountain Lion上失败

我搜索了几个小时但没有用。 我已经看到它在Mac OS X上不支持libusb_detach_kernel_driver ,但我无法找到它的补丁或替代品。 libusb_claim_interface返回: libusb: 0.863377 error [darwin_claim_interface] USBInterfaceOpen: another process has device opened for exclusive access 如何从内核中分离USB设备?

如何以编程方式获取mac os x macbooks的电池寿命?

我想要做的是记录电池百分比。 我知道linux中的等价物是sysctl(hw.acpi.battery.life)。 但是,当我在mac os x中通过sysctl的人时,我找不到找到它的等效代码。 有人可以指出如何使用目标c来做到这一点。 我可以调用sysctlbyname但是它的结构中没有这个输入。 请帮助我

OS X clang -pthread

在OS X中使用带有clang的pthread库有什么编译器/链接器要求。 使用GCC我知道使用-pthread设置适当的编译器/链接器选项,但我不确定OS X与clang。 air:~ jose$ clang++ -c test.cpp -pthread air:~ jose$ clang++ -o test -pthread test.o clang: warning: argument unused during compilation: ‘-pthread’ air:~ jose$ g++ -c test.cpp -pthread air:~ jose$ g++ -o test -pthread test.o

为什么禁止在mac中使用fork而不使用exec?

我的问题很简单。 在Linux上,使用fork而不使用exec非常流行 但是,我发现在MacOS上这是不可能的(参见fork手册) https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/fork.2.html 您在子进程中可以做的事情是有限的。 为了完全安全,你应该自己限制自己只执行异步信号安全操作,直到调用其中一个exec函数为止。 除非明确记录为安全或异步信号安全,否则在fork()之后,应假定任何框架或库中的所有API(包括全局数据符号)都是不安全的。 如果您需要在子进程中使用这些框架,则必须执行。 在这种情况下,执行自己是合理的。 这对我来说很奇怪? 是什么原因? 有可能解决它吗?

如何在OSX上检测安全模式

我有一些代码,如果用户没有以安全模式启动,我只想运行。 有没有办法使用我可以检测到的CoreFoundation或C标准API? 编辑:感谢我接受的答案,这是我的代码: #include … int safeBoot; int mib_name[2] = { CTL_KERN, KERN_SAFEBOOT }; size_t length = sizeof(safeBoot); if (!sysctl(mib_name, 2, &safeBoot, &length, NULL, 0)) { if (safeBoot == 1) { // We are in safe mode } else { // Normal mode. Continue… } } else { // Couldn’t find safe boot information }

达尔文真的没有mmap吗?

我试图找出如何在Mac上重新映射内存映射文件(当我想扩展可用空间时)。 我看到我们在Linux世界中的朋友都有mremap但我在Mac上的标题中找不到这样的function。 /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h具有以下内容: mmap mprotect msync munlock munmap 但没有mremap man mremap证实了我的恐惧。 如果我想调整映射文件的大小,我当前需要munmap和mmmap ,这涉及使所有加载的页面无效。 肯定有更好的办法。 一定? 我正在尝试编写适用于Mac OS X和Linux的代码。 如果我必须这样做,我可以满足于在每种情况下使用最佳function的宏,但我宁愿正确地做。

使用标准C在Mac OS X中获取操作系统版本

我试图在C中以编程方式获得Mac OS X的版本。在搜索了一段时间之后我尝试了这段代码: #include int GetOS() { SInt32 majorVersion,minorVersion,bugFixVersion; Gestalt(gestaltSystemVersionMajor, &majorVersion); Gestalt(gestaltSystemVersionMinor, &minorVersion); Gestalt(gestaltSystemVersionBugFix, &bugFixVersion); printf(“Running on Mac OS X %d.%d.%d\n”,majorVersion,minorVersion,bugFixVersion); return 0; } XCode返回LD错误: Undefined symbols for architecture x86_64: “_Gestalt”, referenced from: _GetOS in main.o 我错过了什么? 你怎么做到这一点? 我也发现了这个片段 [[NSProcessInfo processInfo] operatingSystemVersionString] 但我不知道怎么用C写的。

编写OS X内核扩展以实现Linux的SO_BINDTODEVICE套接字选项

我希望能够通过特定的网络接口强制套接字。 在Linux中,内核允许程序员通过设置所述套接字选项来实现这一点 – 但在OS X中,我处于黑暗中。 因此我的标题问题 – 是否可能? 它完成了吗? 我不打算重新实现IP堆栈,只是启用了bind-to-interface选项。

使用gcc,严格包含C99符号,特别是不包括POSIX

经过多年的编程,我正在修课。 我的导师没有使用POSIX机器,最近我因在作业中使用indexfunction而受到惩罚。 我做了一些研究,我注意到虽然index是AT&T Unix的早期部分,并且符合POSIX标准,但它不是C99标准的一部分。 我希望gcc帮我找到类似符号的用法 。 我正在使用gcc 4.2( 不是 llvm)在OSX上编译 我的第一站研究涉及注意我的string.h文件在下面的特征测试宏检查中包装index的原型: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 经过一番挖掘,我发现了这个(在我的/usr/include/sys/cdefs.h ): /* STRICT Defining _POSIX_C_SOURCE or _XOPEN_SOURCE restricts the * available APIs to exactly the set of APIs defined by the * corresponding standard, based on the value defined. * * A correct, portable definition for _POSIX_C_SOURCE is 200112L. […]