iOS opendir(" / Library")不允许操作

时间:2015-12-29 11:08:33

标签: ios posix-api

目录的权限如下:

/Applications d rwxrwxr-x root admin
/Library      d rwxrwxr-x root admin
/private      d rwxr-xr-x root wheel

opendir("/Applications")效果很好 opendir("/Library")不允许操作 opendir("/private")不允许操作

运行时环境: iOS设备7.7 / 9.2 + xcode 7.2 并且调试消息使用print()在控制台中打印 但是在使用iOS模拟器而不是iOS设备时效果很好

我尝试使用getpwuid(getuid())getgrgid(getgid())来获取线程的用户,它告诉的结果移动移动

void RootPremission::getDirFiles (const char* path, int deep) { // outside call this function with parameter "/" and 0
    struct stat statBuf;
    if (lstat(path, &statBuf) == 0) {
        printf("%s\n", setFileInfo(&statBuf));

        if (S_ISDIR(statBuf.st_mode)) { // go deep dir
            DIR *dp = NULL;
            if ((dp = opendir(path)) != NULL) {
                struct dirent *dirp = NULL;
                while ((dirp = readdir(dp)) != NULL) {
                    if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0 || *dirp->d_name == '.') {
                        continue;   // ignore . and .. and hiden file
                    }

                    for (int i=0; i!=deep; ++i) {
                        printf(" ");
                    }
                    printf("|- %s ", dirp->d_name);

                    char *fullPath = strcatPath(path, dirp->d_name);
                    getDirFiles (fullPath, deep+1);
                    free(fullPath);
                    fullPath = NULL;
                }
                closedir(dp);
            }
            else {
                printf("#");
                perror(path);
            }
        }
        else {  // try to open file
            if (S_ISREG(statBuf.st_mode)) {
                FILE *file = fopen(path, "r");
                if (file != NULL) {
                    if (fclose(file) == EOF) {
                        perror(path);
                    }
                }
                else {
                    printf("+");
                    perror(path);
                }
            }
        }
    }
    else {
        printf("$");
        perror(path);
    }
}

问题是: 1。 使用iOS设备,相同的权限,相同的用户和相同的群组,为什么" / Applications"可以很好地工作和" /图书馆"使用不允许的操作??? 2。当使用iOS模拟器而不是iOS设备时,可以使用opendir() ???

打开这三个目录 谢谢你的善意!!!

0 个答案:

没有答案