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。应该谨慎地使用这个方法,因为关于进程名称存在一些假设(比如用户默认的设置)

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

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSFileManager *fm;
        NSString *source, *dest;
        NSProcessInfo *proc = [NSProcessInfo processInfo];
        // 获取输入的命令行参数
        NSArray *args = [proc arguments];
        
        fm = [NSFileManager defaultManager];
        NSLog(@"%@", [fm currentDirectoryPath]);
        
        // 检查命令行中的两个参数
        if ([args count] != 3) {
            NSLog(@"Usage: %@ src dest", [proc processName]);
            return 1;
        }
        
        source = args[1];
        dest = args[2];
        
        // 确定能够读取源文件
        if ([fm isReadableFileAtPath: source] == NO) {
            NSLog(@"Can't read %@", source);
            return 2;
        }
        
        // 目标文件是否是一个目录
        // 若是,添加源到目标的结尾
        BOOL isDir;
        [fm fileExistsAtPath: dest isDirectory: &isDir];
        
        if (isDir == YES)
            dest = [dest stringByAppendingPathComponent: [source lastPathComponent]];
        
        // 若目标文件已存在,则删除文件
        [fm removeItemAtPath: dest error: NULL];
        
        // 执行复制
        if ([fm copyItemAtPath: source toPath: dest error: NULL] == NO) {
            NSLog(@"Copy failed!");
            return 3;
        }
        
        NSLog(@"Copy of %@ to %@ succeeded!", source, dest);
    }
    return 0;
}

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


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

小知识

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

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



标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号