NSProcessInfo类

作者:追风剑情 发布于:2019-3-5 18:13 分类:Objective-C

当我们编写命令行程序时,如果不想直接处理main函数的argv和argc参数,可以使用NSProcessInfo类来处理命令行参数,从而避免处理C字符串。

NSProcessInfo类方法
方法 描述
+(NSProcessInfo *) processInfo 返回当前进程的信息
-(NSArray *) arguments 以NSString对象数组的形式返回当前进程的参数
-(NSDictionary *) environment 返回变量/值对词典,以描述当前的环境变量(比如PATH和HOME)及其值
-(int) processIdentifier 返回进程标识符,它是操作系统赋予进程的唯一数字,用于识别每个正在运行的进程
-(NSString *) processName 返回当前正在执行的进程名称
-(NSString *) globallyUniqueString 每次调用这个方法时,都返回不同的单值字符串。可以用这个字符串生成单值临时文件名
-(NSString *) hostName 返回主机系统的名称(在笔者的OS X系统中,返回的是xxxxxdeMacBook-Pro.local)
-(NSUInteger) operatingSystem 返回表示操作系统的数字
-(NSString *) operatingSystemName 返回操作系统的名称(在笔者的Mac上,返回常量NSMACHOperatingSystem,其中可能的返回值定义在NSProcessInfo.h中)
-(NSString *) operatingSystemVersionString 返回操作系统的当前版本(在笔者的Mac OS X系统中,返回Version 10.14.2 (Build 18C54))
-(void) setProcessName: (NSString *) name 将当前进程名称设置为name。应该谨慎地使用这个方法,因为关于进程名称存在一些假设(比如用户默认的设置)

示例一:通过命令行参数复制文件

  1. #import <Foundation/Foundation.h>
  2.  
  3. int main(int argc, const char * argv[]) {
  4. @autoreleasepool {
  5. NSFileManager *fm;
  6. NSString *source, *dest;
  7. NSProcessInfo *proc = [NSProcessInfo processInfo];
  8. // 获取输入的命令行参数
  9. NSArray *args = [proc arguments];
  10. fm = [NSFileManager defaultManager];
  11. NSLog(@"%@", [fm currentDirectoryPath]);
  12. // 检查命令行中的两个参数
  13. if ([args count] != 3) {
  14. NSLog(@"Usage: %@ src dest", [proc processName]);
  15. return 1;
  16. }
  17. source = args[1];
  18. dest = args[2];
  19. // 确定能够读取源文件
  20. if ([fm isReadableFileAtPath: source] == NO) {
  21. NSLog(@"Can't read %@", source);
  22. return 2;
  23. }
  24. // 目标文件是否是一个目录
  25. // 若是,添加源到目标的结尾
  26. BOOL isDir;
  27. [fm fileExistsAtPath: dest isDirectory: &isDir];
  28. if (isDir == YES)
  29. dest = [dest stringByAppendingPathComponent: [source lastPathComponent]];
  30. // 若目标文件已存在,则删除文件
  31. [fm removeItemAtPath: dest error: NULL];
  32. // 执行复制
  33. if ([fm copyItemAtPath: source toPath: dest error: NULL] == NO) {
  34. NSLog(@"Copy failed!");
  35. return 3;
  36. }
  37. NSLog(@"Copy of %@ to %@ succeeded!", source, dest);
  38. }
  39. return 0;
  40. }

运行测试 (打开终端运行exec文件)
111.png


----------------------------------------------------------------------------------------------------------

小知识

打开exec文件所在目录
111.png

或者选择右键菜单中的Show File Inspector
111.png



标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号