obj-c编程10:Foundation库中类的使用(4)[文件管理,查询当前进程信息]
接上一篇文件管理博文.我们可以用NSPathUtilities.h中包含的NSString函数和分类扩展来以兼容的方式处理路径.下面凡是有系统编程经验的童鞋都知道是啥意思了:
#import <Foundation/Foundation.h>
#define msg(...) NSLog(__VA_ARGS__)
int main(int argc, char *argv[]){
@autoreleasepool {
NSString *short_name = @"love.m";
NSArray *componets;
NSString *tmp_dir = NSTemporaryDirectory();
msg(@"tmp_dir : %@",tmp_dir);
NSString *full_name = [tmp_dir stringByAppendingPathComponent:short_name];
msg(@"full_name : %@",full_name);
NSString *ext_name = [full_name pathExtension];
msg(@"ext_name : %@",ext_name);
NSString *home_dir = NSHomeDirectory();
msg(@"home_dir : %@",home_dir);
componets = [@"/usr/local/src/linux/xxx.img" pathComponents];
msg(@"every components : %@",componets);
NSString *path = [@"~/src/objc_src/love.m" stringByExpandingTildeInPath];
msg(@"expand path : %@",path);
path = [path stringByStandardizingPath];
msg(@"expand_way2 path : %@",path);
msg(@"user:%@ , full_user:%@",NSUserName(),NSFullUserName());
//last is longer...
NSArray *list = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory,\
NSUserDomainMask,YES);
msg(@"%@",list);
list = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory,\
NSSystemDomainMask|NSLocalDomainMask|NSNetworkDomainMask,YES);
msg(@"%@",list);
NSString *full_path = [list objectAtIndex:0];
full_path = [full_path stringByAppendingPathComponent:@"love.m"];
msg(@"%@",full_path);
}
return 0;
}
以上代码含义都很清楚就不一一解释了,值得说明的是最后一个函数NSSearchPathForDirectoriesInDomains,如果第二个参数为多个单体枚举的聚集,则结果会是一个数组,代码说的很清楚了,上运行结果:
wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f
2014-07-02 15:00:14.756 f[12608] tmp_dir : /tmp/GNUstepSecure1000
2014-07-02 15:00:14.758 f[12608] full_name : /tmp/GNUstepSecure1000/love.m
2014-07-02 15:00:14.758 f[12608] ext_name : m
2014-07-02 15:00:14.759 f[12608] home_dir : /home/wisy
2014-07-02 15:00:14.759 f[12608] every components : ("/", usr, local, src, linux, "xxx.img")
2014-07-02 15:00:14.759 f[12608] expand path : /home/wisy/src/objc_src/love.m
2014-07-02 15:00:14.759 f[12608] expand_way2 path : /home/wisy/src/objc_src/love.m
2014-07-02 15:00:14.759 f[12608] user:wisy , full_user:wisy,,,
2014-07-02 15:00:14.759 f[12608] ("/home/wisy/GNUstep/Applications")
2014-07-02 15:00:14.759 f[12608] ("/usr/local/lib/GNUstep/Applications", "/usr/lib/GNUstep/Applications")
2014-07-02 15:00:14.759 f[12608] /usr/local/lib/GNUstep/Applications/love.m
接下来好玩的来鸟,何曾几时本猫都对入侵其他进程有着变态的偏执狂欲望(这在本猫的其他博文中略有体现),虽然下面代码只是查询本进程的信息,但不积跬步,何以致千里,我们慢慢来吧:
#import <Foundation/Foundation.h>
#define msg(...) NSLog(__VA_ARGS__)
int main(int argc, char *argv[]){
@autoreleasepool {
NSProcessInfo *proc = [NSProcessInfo processInfo];
NSArray *args = [proc arguments];
//msg(@"all_infos : %@",proc);
msg(@"args : %@",args);
NSDictionary *env = [proc environment];
msg(@"env : %@",env);
msg(@"pid : %d",[proc processIdentifier]);
msg(@"process name :%@",[proc processName]);
msg(@"hostname : %@",[proc hostName]);
msg(@"OS type : %d",(unsigned)[proc operatingSystem]);
msg(@"OS name : %@",[proc operatingSystemName]);
msg(@"rand string : %@",[proc globallyUniqueString]);
msg(@"OS ver : %@",[proc operatingSystemVersionString]);
}
return 0;
}
运行结果如下:
wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f 11 22 33 "aa bb cc"
2014-07-02 15:26:34.711 f[12767] args : ("./f", 11, 22, 33, "aa bb cc")
2014-07-02 15:26:34.713 f[12767] env : {"CLUTTER_IM_MODULE" = xim; COLORTERM = "gnome-terminal"; "DBUS_SESSION_BUS_ADDRESS" =
"unix:abstract=/tmp/dbus-obtBgG4wMe"; "DEFAULTS_PATH" = "/usr/share/gconf/xfce.default.path"; "DESKTOP_SESSION" = xfce;
DISPLAY = ":0.0"; GDMSESSION = xfce; "GDM_LANG" = "zh_CN"; "GLADE_CATALOG_PATH" = ":"; "GLADE_MODULE_PATH" = ":";
"GLADE_PIXMAP_PATH" = ":"; "GNOME_KEYRING_CONTROL" = "/run/user/1000/keyring-1BJWxI"; "GNOME_KEYRING_PID" = 1714;
"GTK_IM_MODULE" = fcitx; "GTK_MODULES" = "overlay-scrollbar:unity-gtk-module"; HOME = "/home/wisy"; "IM_CONFIG_PHASE" = 1;
INSTANCE = ""; JOB = dbus; LANG = "zh_CN.UTF-8"; LANGUAGE = "zh_CN:zh"; LESSCLOSE = "/usr/bin/lesspipe %s %s";
LESSOPEN = "| /usr/bin/lesspipe %s"; LOGNAME = wisy; "LS_COLORS" = "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;300;36:/";
"UBUNTU_MENUPROXY" = 1; "UPSTART_EVENTS" = "started xsession"; "UPSTART_INSTANCE" = ""; "UPSTART_JOB" = startxfce4;
"UPSTART_SESSION" = "unix:abstract=/com/ubuntu/upstart-session/1000/1717"; USER = wisy; "VTE_VERSION" = 3409;
WINDOWID = 62914568; XAUTHORITY = "/home/wisy/.Xauthority"; "XDG_CONFIG_DIRS" = "/etc/xdg/xdg-xfce:/usr/share/upstart/xdg:/etc/xdg:/etc/xdg";
"XDG_CURRENT_DESKTOP" = XFCE; "XDG_DATA_DIRS" = "/usr/share/xfce:/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share";
"XDG_GREETER_DATA_DIR" = "/var/lib/lightdm-data/wisy"; "XDG_MENU_PREFIX" = "xfce-"; "XDG_RUNTIME_DIR" = "/run/user/1000";
"XDG_SEAT" = seat0; "XDG_SEAT_PATH" = "/org/freedesktop/DisplayManager/Seat0"; "XDG_SESSION_ID" = c2; "XDG_SESSION_PATH" =
"/org/freedesktop/DisplayManager/Session0"; "XDG_VTNR" = 7; XMODIFIERS = "@im=fcitx"; "_" = "./f";(太长截取一部分!) }
2014-07-02 15:26:34.714 f[12767] pid : 12767
2014-07-02 15:26:34.714 f[12767] process name :f
2014-07-02 15:26:34.715 f[12767] hostname : wisy-ThinkPad-X61
2014-07-02 15:26:34.715 f[12767] OS type : 100
2014-07-02 15:26:34.715 f[12767] OS name : GSGNULinuxOperatingSystem
2014-07-02 15:26:34.715 f[12767] rand string : wisy-ThinkPad-X61_31df_1963ebaa_0
2014-07-02 15:26:34.715 f[12767] OS ver : 3.13.0-24-generic
第三种文件拷贝方式,我们使用了NSFileHandle类,该类功能的一个简单流程就是:
1 打开文件
2 对打开得文件执行I/O操作
3 关闭文件
#import <Foundation/Foundation.h>
#define msg(...) NSLog(__VA_ARGS__)
int main(int argc,char *argv[])
{
@autoreleasepool{
NSFileHandle *in_file,*out_file;
NSData *buf;
in_file = [NSFileHandle fileHandleForReadingAtPath:@"x.db"];
if(in_file == nil){
msg(@"open in_file failed");
return 1;
}
[[NSFileManager defaultManager] createFileAtPath:@"out.db" \
contents:nil attributes:nil];
out_file = [NSFileHandle fileHandleForWritingAtPath:@"out.db"];
if(out_file == nil){
msg(@"open out_file failed");
return 2;
}
//可能包含数据,先截断。
[out_file truncateFileAtOffset:0];
buf = [in_file readDataToEndOfFile];
[out_file writeData:buf];
[in_file closeFile];
[out_file closeFile];
msg(@"%@",[NSString stringWithContentsOfFile:@"out.db" \
encoding:NSUTF8StringEncoding error:NULL]);
}
return 0;
}
NSURL类可以从网页上读取对象,这个前面有一个例子,这里不再展开说了,自己度娘哦。
最后还有一个NSBundle类,我简单看了下,类似于windows中的对程序中资源文件的定位操作,不过os x和ios资源的自包含特性更强一些;在ios中进程都在沙盒中运行读取的/目录统统都是虚拟出来的,否则全乱套鸟。貌似扯多鸟...
obj-c编程10:Foundation库中类的使用(4)[文件管理,查询当前进程信息]的更多相关文章
- obj-c编程10:Foundation库中类的使用(3)[文件管理]
好吧,不管神马系统都无可避免的要说到文件,目录,路径(PATH)管理的内容,下面我们来看看在F库中对他们的支持.我简单看了下,不谈其他光从方法命名来说就多少显得有点复杂,如果和ruby相比就呵呵了. ...
- obj-c编程10:Foundation库中类的使用(2)[字符串,数组]
Foundation库的内容不可谓不多,就算很精简的说篇幅也受不了啊!笨猫一向反对博客文章一下子拖拖拉拉写一大坨!KISS哦!so将上一篇文章再分一篇来说,于是有了这篇,可能还会有(3)哦... 我发 ...
- obj-c编程10:Foundation库中类的使用(6)[线程和操作队列]
任何语言都不能避而不谈线程这个东东,虽然他是和平台相关的鸟,虽说unix哲学比较讨厌线程的说...线程不是万能灵药,但有些场合还是需要的.谈到线程就不得不考虑同步和死锁问题,见如下代码: #impor ...
- obj-c编程10:Foundation库中类的使用(5)[时间对象]
隔了好久才有了这新的一篇,还是无奈的时间啊!so这次我们就着重谈谈它喽. F库中有很多时间相关的类,比如NSDate,NSTimeInterval,NSTimeZone,NSDateComponent ...
- obj-c编程10:Foundation库中类的使用(1)[数字,字符串]
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj ...
- C++的XML编程经验――LIBXML2库使用指南[转]
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...
- Java 库:为 Java 程序员而生的 10 + 最佳库
众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...
- C++的XML编程经验――LIBXML2库使用指南
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...
- 并发编程 10—— 任务取消 之 关闭 ExecutorService
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
随机推荐
- Swift函数柯里化(Currying)简谈
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化.简单的说就是把接收多 ...
- 【环境配置】配置maven
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺 ...
- Android初级教程:Android中解析方式之pull解析
在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...
- iOS 屏幕方向
参考文章:http://www.tuicool.com/articles/e2q6zi 一般的应用,只会支持竖屏正方向一个方向,支持多个屏幕方向的应用还是比较少的. 当时也没搞明白,所以直接就设置了正 ...
- jquery实战第一讲---概述及其入门实例
就在5月28号周四下午五点的时候,接到xxx姐姐的电话,您是xxx吗?准备一下,周五上午八点半去远洋面试,一路风尘仆仆,颠颠簸簸,由于小编晕车,带着晕晕乎乎的脑子,小编就稀里糊涂的去面试了,温馨提醒, ...
- 【OpenGL】理解一些基本问题
写在前面 啦啦啦,搞了很久的Unity Shaders,越学越觉得基础知识很重要.学Unity Shader的时候,总会想,shader到底是什么呢?shader的pipeline是什么呢?它们是怎么 ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...
- springMVC对异常处理的支持
无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...
- 基于xml 实现动态加载权限功能树列表---EFSFrame企业级开发架构
在学习EFSFrame框架的过程中,感触最深的就是通过xml来实现前台与后台数据的交互,页面设计灵活,不用管后台如何写的,前台与后台的交互唯一的交互通道都是xml,在我们需要添加页面.添加规定的格式的 ...
- UNIX环境高级编程——管道读写规则和pipe Capacity、PIPE_BUF
一.当没有数据可读时O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止. O_NONBLOCK enable:read调用返回-1,errno值为EAGAI ...