【发布时间】:2018-07-14 08:51:32
【问题描述】:
我正在使用 C open() 函数在 android 中创建文件并根据需要设置访问权限。我观察到在 Android 中, open() 只能设置用户级别的访问权限。为了给文件必要的组和其他级别的权限,我必须在创建文件后显式使用 chmod() 。
这就是我正在做的,
/*Test code - starts*/
tmp = open("/data/data/com.application.app1.tests/foo5.txt", O_CREAT | O_RDWR | O_TRUNC | O_SYNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP ); // these permissions doen't seems o work hence will work with chmod
close(tmp);
tmp = open("/data/data/com.application.app1.tests/foo7.txt", O_CREAT | O_RDWR | O_TRUNC | O_SYNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
close(tmp);
tmp = open("/data/data/com.application.app1.tests/foo8.txt", O_CREAT | O_RDONLY, S_IRUSR | S_IRGRP | S_IROTH);
close(tmp);
tmp = open("/data/data/com.application.app1.tests/foo55.txt", O_CREAT | O_RDWR | O_TRUNC | O_SYNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); // these permissions doen't seems o work hence will work with chmod
close(tmp);
chmod("/data/data/com.application.app1.tests/foo55.txt", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
tmp = open("/data/data/com.microsoft.palAWasp.tests/foo77.txt", O_CREAT | O_RDWR | O_TRUNC | O_SYNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
close(tmp);
chmod("/data/data/com.application.palAWasp.tests/foo77.txt", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
tmp = open("/data/data/com.application.app1.tests/foo88.txt", O_CREAT | O_RDONLY, S_IRUSR | S_IRGRP | S_IROTH);
close(tmp);
chmod("/data/data/com.application.app1.tests/foo88.txt", S_IRUSR | S_IRGRP | S_IROTH);
/*Test code - Ends*/
下面的输出是这样的,
/***************编辑***************/ 另一个重要的观察是,当我尝试使用上述权限位创建类似文件时,默认权限位是,
-rw------- u0_a100 u0_a100 0 2018-03-26 12:43 foo5.txt
-rw------- u0_a100 u0_a100 0 2018-03-26 12:43 log0.log
当我尝试使用 chmod 更改权限位时,它失败了。 请注意,chmod 适用于数据目录中的文件,但不适用于 /sdcard/ 上的文件
请帮助我理解这种行为。
【问题讨论】:
-
关于chmod在数据目录下工作,但对/sdcard上的文件不起作用,可能与挂载到/sdcard的分区与数据目录不同有关。也许我错了,但我猜 /sdcard 使用 fat32?如果我错了,请纠正我。
标签: android c file-io fopen android-sdcard