在iOS系统中使用fopen函数

这些天在应用中用到openssl编解码的时候遇到用fopen打开文件拿不到FILE的情况,造成crash,最后得到解决,以下是记录:

因为应用底层有部分代码是C编写的,在这里要打开一个文件来读取数据,一开始在Objective-C中创建文件的时候是用的NSURL,传到C代码中的时候使用[[url absoluteString] UTF8String],在fopen的时候拿到的fd是-1,没有打开文件。

追踪代码的时候发现,NSURL指向的文件路径是 file:///xxxx 这样的格式,但如果是NSString指向的文件路径就是 /file/xxxx,在UNIX文件系统中肯定前者是无法定位到一个文件的,最后修改创建文件并获取文件的方式为通过NSString来指向文件,千万不能使用NSURL

文件放在Document和tmp下都不影响。

以上是解决这次问题的收获,血的教训啊,花了30分钟才发现。希望对看到的朋友有帮助。

时间: 2024-11-05 20:47:59

在iOS系统中使用fopen函数的相关文章

在MacOS和iOS系统中使用OpenCV

来源:http://blog.devtang.com/blog/2012/10/27/use-opencv-in-ios/ 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很少.好不容易搜到些资料,却发现由于OpenCV和XCode的版本更新,变得不再有用了.有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路. 可以预见到,随着

[转]在MacOS和iOS系统中使用OpenCV

OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很少.好不容易搜到些资料,却发现由于OpenCV和XCode的版本更新,变得不再有用了.有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路. 可以预见到,随着XCode和OpenCV的版本更新,本文可能不再有效了. 所以特此注明,文本介绍的搭建方法仅针对于 XCode4.5.1 和 Op

MAC下Unity编译成Xcode后倒入IOS系统中的各种坑总结

unity3d版本: 5.3.0f4 xcode版本: 7.3.1 - xcode7.3.1已经支持免开发者证书真机调试, 这个版本下不再需要花费99刀购买个人开发者证书,仅需要个人appstoreID即可进行调试: - 该版本unity3d工程编译成xcode可执行文件后,导入IOS过程中会报2次错误,具体描述如下: 1. "unknown type name __declspec" 解决方法:xcode中找到il2cpp-config.h文件,在181行(上下)找到 #define

AIX系统中使用bsdlog函数输出内核信息

AIX系统中使用bsdlog函数输出内核信息 (1)修改syslogd进程的配置文件/etc/syslog.conf,使用echo命令在文件末尾添加内容“kern.info /tmp/kerninfo.log” echo “kern.info /tmp/kerninfo.log” >> /etc/syslog.conf (2)使用touch命令创建kerninfo.log文件,用此文件作为kernel info级别消息的输出文件 touch /tmp/kerninfo.log (3)重启sys

如何在ios 系统 中抓包??

为了实现在ios系统上抓包,如下步骤: 1,设备越狱 2,在cydia-软件源-设置中改为开发者,否则有些deb搜索不到 安装如下软件:OpenSSH,OpenSSL,wget (下载工具) Aptitude 及 APT 0.6 Transitional (deb包工具) unzip 及 zip (解压缩及压缩打包工具) 3,安装并启动sshd后,通过ssh -l root IPAD_IP_ADDRESS登录,默认口令是:alpine,这是ios系统默认的root密码,记得及时修改. 4,命令行

有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)

今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功能,即只有当二维码进入视图中心的方框中时才进行扫描识别功能,这样做的目的主要是为了提高用户的使用体验,需要用到这个类里面的一个属性:rectOfInterest,这个属性是一个CGRect结构体类型.但和我们平时经常使用的CGRect有点不一样.以下截取了官网文档对这个属性的表述: /*! @pro

64位IOS系统中敲壳提取32位程序

测试机一直是5s和6,Clutch敲壳,实际是一个内存dump的过程,所以每次敲壳后的程序载入IDA都不能开心的F5来查看交叉引用以及简要逻辑. 终于决定要搞下这个坑,发现竟然并不是太简单的事情,或许还是IOS的相关知识掌握的不多. 首先,我们查找到lipo这个东西.lipo是command-tools里面的工具,之前或许是随着xcode一起下发的,貌似某个6.x的版本之后,就独立了出来,需要单独下载. xcode-select --install 此处也是一个坑,为了文件交换的方便,我使用的是

移动端开发在iOS系统中 new Date() 返回 NaN 的问题

问题: 通过 new Date() 函数将后台返回的时间('2021-11-25')获取时间戳.在 chrome 浏览器中没有出现问题,但在 iPhone 真机测试的时候,显示的结果不符合预期.通过调试发现 iOS 中 new Date('2021-11-25') 返回的结果是 NaN,问题出现的原因是 iOS new Date() 中不能包含 - 符号. 解决办法: 最简单的办法,后台直接返回处理好的时间; 通过字符串的replace()方法(String.prototype.replace(

IOS系统中网络等待的Loading的实现方法 等待加载

镔哥就直接写一个简单的方法吧: 第一种方法: self.title=@"直视行情"; //[self getLodingView]; self.webView =[[UIWebView alloc]initWithFrame:CGRectMake(0, -2, self.view.frame.size.width,self.view.frame.size.height+30)]; [_webView setUserInteractionEnabled:NO]; [_webView se