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