Tag: macos

使用SecItemImport导入PKCS12

Apple的OS X 文档讨论了如何使用SecItemImport获取SecKeyRef 。 函数签名如下所示: OSStatus SecItemImport ( CFDataRef importedData, CFStringRef fileNameOrExtension, SecExternalFormat *inputFormat, SecExternalItemType *itemType, SecItemImportExportFlags flags, const SecItemImportExportKeyParameters *keyParams, SecKeychainRef importKeychain, CFArrayRef *outItems ); 以下代码将尝试加载包含单个RSA密钥的PKCS12字节数组: #include #include #include int main(void) { CFArrayRef array = NULL; SecItemImportExportKeyParameters params; SecExternalItemType itemType = kSecItemTypeUnknown; SecExternalFormat format = kSecFormatUnknown; params.flags = kSecKeyNoAccessControl; UInt8 bytes[] = { 0x30, […]

为什么OSX将atoi / atof记录为不是线程安全的?

我知道strtol和strtof比atoi / atof更受欢迎,因为前者检测错误,而且当涉及非base-10时,strtol比atoi更灵活。 但我仍然对某些事情感到好奇:OS X上的’man atoi’(或atof)(虽然不在Linux上!)提到atoi / atof不是线程安全的。 坦率地说,我很难想象atoi或atof的可能实现是不会线程安全的。 有人知道为什么手册页会这么说吗? 这些function在OS X或任何其他平台上实际上是不安全的吗? 如果它们是,那么为什么图书馆不会根据strtol定义atoi,因此是安全的?

如何在Xcode中编译包含多个文件的C程序

我在Mac上运行Mac OS X 10.6.3和Xcode 3.2.1 64位,我想知道是否有可能在Xcode中编译带有多个.c文件的C程序。 提前致谢!

在项目中使用libfuse,没有root访问权限(用于安装)? FTP安装和inotify / kqueue / FSEvents

我希望我的应用程序能够显示远程FTP(或SFTP等)位置的目录列表。 当远程目录树中的文件/目录发生更改时,应用程序应使用相关更改更新其视图。 因为遍历整个树是缓慢而浪费的,所以我想使用FSEvents(Linux上的inotify / kqueues)的内容,但显然这些库是基于文件系统的,并且与FTP服务器的连接不一样作为挂载的文件系统。 为了使这些库工作,我需要在本地机器上实际安装由FTP / SFTP支持的文件系统,然后将FSEventStream(或kqueue等)附加到此本地安装。 我知道FUSE可以做到这一点,但有没有办法我可以使用FUSE而无需用户首先安装它? 我的意思是,我可以将它与我的(Mac)应用程序捆绑在一起并创建挂载,而无需让用户完成实际运行安装程序包的过程,将libfuse和内核模块复制到系统中吗? 是否假设/dev/fuse存在,或者它是否可以存在于我的应用程序目录中的/dev/ path之外? Nice Mac应用程序只需拖放就可以安装,如果可能的话我想保留这种方式。 我不清楚是否可以直接使用libfuse(如果文件包含在应用程序中),而不是在系统路径中安装它。 或者,是否有人有任何其他建议来监控FTP上的更改,而不进行轮询?

读取文件时出现段错误

我想阅读整个文件内容并将其打印出来,但我得到一个段错误,我找不到代码有什么问题… #include #include int main() { FILE * file; long fsize; file = fopen(“./input.txt”,”r”); if(file != NULL){ //get file size fseek(file,0,SEEK_END); fsize = ftell(file); rewind(file); // print char * file_content; fgets(file_content,fsize,file); puts(file_content); } else{ printf(“open failure\n”); } fclose(file); return 0; }

使用pcap从802.11帧处理不正确的mac地址

我正在通过pcap和无线工作。 根据我之前的问题回复发布的示例,我试图从无线帧中提取mac地址。 我已经为radiotap头和基本管理框架创建了结构。 出于某种原因,当涉及到尝试输出mac地址时,我打印出错误的数据。 当我与wireshark比较时,我不明白为什么无线电分接数据正确打印出来但mac地址却没有。 当我查看数据包并比较我捕获的数据包时,我看不到wireshark显示的hex转储中的任何额外填充。 我有点熟悉c而不是专家所以也许我没有正确使用指针和结构有人可以帮助告诉我我做错了什么? 谢谢,昆汀 // main.c // MacSniffer // #include #include #include #define MAXBYTES2CAPTURE 65535 #ifdef WORDS_BIGENDIAN typedef struct frame_control { unsigned int subtype:4; /*frame subtype field*/ unsigned int protoVer:2; /*frame type field*/ unsigned int version:2; /*protocol version*/ unsigned int order:1; unsigned int protected:1; unsigned int moreDate:1; unsigned int power_management:1; unsigned […]

OpenCL到OpenGL纹理问题

我正在尝试使用OpenCL绘制到我从OpenGL纹理获得的cl_image,然后渲染该纹理。 问题是当我在CL_DEVICE_TYPE_CPU上运行我的代码时,它工作正常但是当我在CL_DEVICE_TYPE_GPU上运行时,纹理似乎是一些随机像素。 我是OpenCL的新手,不知道发生了什么,所以我将在下面发布代码,也在OSX上使用OpenCL。 主机代码: #import “GLView.h” #import #import #import “kernel.cl.h” #define WIDTH 500 #define HEIGHT 500 static GLfloat squareVertexData[] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f }; @interface GLView () […]

如何检测内存泄漏?

我是编程新手,我想知道如何检测内存泄漏? 如果您要推荐一个实用程序,请尝试找一个适用于Mac OS X Lion的实用程序。 PS我试过valgrind,它不适用于10.7 / Lion。

C缓冲区溢出 – 为什么有一个固定的字节数会导致段错误? (Mac OS 10.8 64位,铿锵)

我在C中试验缓冲区溢出,发现了一个有趣的怪癖: 对于任何给定的数组大小,似乎有一定数量的溢出字节可以在SIGABRT崩溃之前写入内存。 例如,在下面的代码中,10字节数组可以在27处崩溃之前溢出到26个字节。类似地,在第41个char中止之前,20个char的数组可以溢出到40个char 。 谁能解释为什么会这样? 此外,SIGABRT是否与“分段故障”相同(或由其引起)? Mac OS 10.8 – Xcode 4.6,clang和lldb。 谢谢! #include int main(int argc, const char * argv[]) { char aString[ 10 ]; char aLetter = ‘a’; printf(“The size of one array slot sizeof( aString[0] ) is %zu\n”, sizeof(aString[0])); printf(“The size of one letter sizeof( aLetter ) is %zu\n”, sizeof(aLetter)); // Overflow […]

xnu中的vnode和文件描述符,存储文件操作向量的位置

在xnu中,我们有vnode_t实体,它代表全局文件。 每个进程都可以通过设置新的文件描述符并在fg_data下设置vnode来访问该文件(假设它具有正确的权限) fp->f_fglob->fg_data = vp; vnode包含所有相关操作的基本操作列表,并根据文件的FS进行设置。 即HFS +驱动程序实现此类向量并相应地设置其vnode。 int (**v_op)(void *); /* vnode operations vector */ 这是可以在vnode上运行的所有操作的函数指针的向量。 另外,我们有fileops结构,它是文件描述符(fg_global)的一部分,它描述了这些函数的最小子集: 这是一个典型的定义: const struct fileops vnops = { .fo_type = DTYPE_VNODE, .fo_read = vn_read, .fo_write = vn_write, .fo_ioctl = vn_ioctl, .fo_select = vn_select, .fo_close = vn_closefile, .fo_kqfilter = vn_kqfilt_add, .fo_drain = NULL, }; 我们在这里设置: fp->f_fglob->fg_ops = &vnops; 我看到当在本地文件系统(HFS […]