Tag: macos

在C中捕获段错误

我有一个程序,有时会从指针算术中发生段错误。 我知道这种情况发生了,但是我不能提前检查它是否是段错误 – 要么我可以“预扫描”输入数据以查看它是否会导致段错误(这是无法确定的),或者我可以修改它不使用指针算法,这将需要大量的工作,或者我可以尝试捕获段错误。 所以我的问题: 1)如何在C中捕获段错误? 我知道操作系统中的某些内容会导致段错误,但是如果C程序的Segmentation fault比仅仅Segmentation fault更优雅,那么它可以做些什么呢? 2)这有多便携? 我想这是一个非常不可移植的行为,所以如果你发布任何代码来捕获段错误,请告诉我它的工作原理。 我在Mac OS X上,但我希望我的程序可以在尽可能多的平台上工作,我想知道我的选择是什么。 并且不用担心 – 基本上我想要做的就是打印一个更加用户友好的错误消息并释放一些malloc() ed内存,然后死掉。 我不打算只是忽略我得到的所有段错误并继续前进。

CGPathAddArc与CGPathAddArcToPoint

Apple的CoreGraphics库定义了两个用于描述弧的函数。 CGPathAddArc根据中心点,半径和一对角度添加弧。 CGPathAddArcToPoint根据半径和一对切线添加弧。 详细信息在CGPath API参考中进行了解释。 为什么两个function? 简单方便? 一个比另一个更有效吗? 一个是用另一个定义的吗?

如何以编程方式访问剪贴板数据?

如何以编程方式访问Mac上的剪贴板数据?

打开多个档案的大中央战略

我有一个使用Grand Central调度队列的工作实现:(1)打开文件并在“queue1”上计算OpenSSL DSA哈希,(2)将哈希写出到新的“side car”文件,以便稍后validation“queue2” 。 我想同时打开多个文件,但是基于一些不会通过打开100个文件并超过硬盘驱动器可持续输出而“阻塞”操作系统的逻辑。 照片浏览应用程序(如iPhoto或Aperture)似乎打开多个文件并显示它们,所以我假设可以这样做。 我假设最大的限制是磁盘I / O,因为应用程序可以(理论上)同时读写多个文件。 有什么建议? TIA

为什么fflush(stdin)不会删除缓冲区(stdin)

我有这样的测试代码 #include #include #include int main() { char c, str[20]; printf(“Enter a character : “); scanf(“%c”, &c); printf(“Enter a string : “); fflush(stdin); gets(str); printf(“\n\n\nResult : %c\n%s\n”, c, str); return 0; } 我读过一些文章说这个代码会起作用,因为在扫描c字符后,缓冲区中仍然有’\ n’字符。 fflush(stdin)将清除缓冲区,因此gets()函数可以正常工作 但事实上,当我在Mac OS环境中编译并运行此代码时,fflush(stdin)什么都不做。 我输入了一个字符(例如’k’),然后打印出k字符和’\ n’字符。 它假设允许我输入一个字符,一个字符串,然后打印它们。 谁知道为什么? 谢谢!

无法获取lldb来读取文件输入

我正在使用lldb作为OSX中的独立调试器。 我正在尝试使用文本文件作为输入来调试C可执行文件。 lldb文档指定了以下用于将stdin更改为给定文件的命令: process launch -i 使用此命令,lldb似乎忽略指定的文件,而不是等待键盘输入。 这是预期的行为吗? 如果是这样; 我需要做什么才能真正让进程对我想要的输入文件进行操作? tl; dr:我如何让lldb模仿标准终端执行,如: ./executable <

如何禁用“curses.h”头文件(Xcode 6.3 OSX Yosemite中的“stdio.h”的一部分)以避免冲突的函数声明

我正在尝试在Xcode中构建一个项目,但是我得到了错误Implicit declaration of function ‘clear’ is invalid in C99 Conflicting types for ‘clear’ Implicit declaration of function ‘clear’ is invalid in C99 。 这是代码: //main.c #include #include “tree.h” int main(){ clear(); // Implicit declaration of function ‘clear’ is invalid in C99 return 0; } //tree.c #include #include “tree.h” void clear(){ ///Conflicting types for ‘clear’ printf(“Command […]

如何保证64位写入是primefaces的?

什么时候可以保证64位写入是primefaces的,在基于Intel x86的平台上用C编程时(特别是使用英特尔编译器运行MacOSX 10.4的基于Intel的Mac)? 例如: unsigned long long int y; y = 0xfedcba87654321ULL; /* … a bunch of other time-consuming stuff happens… */ y = 0x12345678abcdefULL; 如果另一个线程在y的第一次赋值完成后检查y的值,我想确保它看到值0xfedcba87654321或值0x12345678abcdef,而不是它们的某些混合。 我想这样做没有任何锁定,如果可能的话没有任何额外的代码。 我希望,当在支持64位代码(MacOSX 10.4)的操作系统上使用64位编译器(64位Intel编译器)时,这些64位写入将是primefaces的。 这总是如此吗?

mac屏幕保护程序启动事件

屏幕保护程序启动时是否有事件被触发? 喜欢钥匙串锁定: OSStatus keychain_locked(SecKeychainEvent keychainEvent, SecKeychainCallbackInfo *info, void *context){…}

OS X版本(Lion或不是)检测的C宏?

是否有预定义的C宏来检测OS X的版本? 我知道__MACH__和__MACH__存在,但那些是二进制的。 是否有__APPLE_CC__的特定值表示狮子? 特别是,Lion在Lion中将getline()的定义添加到中,能够检测代码是否在Lion上进行编译以及解决编译错误是很好的。 具体来说,我指的是在Bash(XCode之外)中构建Unix C代码。