目录的权限如下:
/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()
???
谢谢你的好意!!!