0

目录的权限如下:

/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 设备时效果很好

我尝试通过使用and来获取线程的用户,它告诉了移动移动的结果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”可以正常工作而“/Library”在Operation not allowed的情况下工作? 2.当使用iOS模拟器代替iOS设备时,这三个目录可以用opendir()???

谢谢你的好意!!!

4

0 回答 0