如何知道C中的其他用户是否可以读取文件?

时间:2015-10-07 07:06:25

标签: c

我使用linux制作一个简单的Web服务器。我想知道我应该使用哪些函数来获取文件的可读性。

3 个答案:

答案 0 :(得分:0)

您可以尝试这样:

su username -c 'ls /long/dir/user/yourfilename'

su username -s /bin/sh -c 'ls /long/dir/user/yourfilename'

答案 1 :(得分:0)

SELECT * FROM
(
SELECT user_name, 
COUNT(*) as count1 
FROM purchase 
GROUP BY user_name ) xx
WHERE count1 IN (100, 50, 10)
ORDER BY count1 DESC

在上面的示例中,其他人对当前目录中的文件test.txt具有读取权限。

使用以下宏检查用户及其他人和组的权限。

S_IRWXU - 对所有者的读取,写入和执行权限

S_IRUSR - 所有者具有读取权限

S_IWUSR - 所有者具有写入权限

S_IXUSR - 所有者具有执行权限

S_IRWXG - 组

的读,写和执行权限

S_IRGRP - 群组已获得读取权限

S_IWGRP - 组具有写入权限

S_IXGRP - 组具有执行权限

S_IRWXO - 读取,写入和执行其他人的权限

S_IROTH - 其他人已阅读许可

S_IWOTH - 其他人有写入权限

S_IXOTH - 其他人拥有执行权限

使用上述宏根据您在示例中的if条件中所需的内容修改代码(if(buf.st_mode& S_IROTH))。

答案 2 :(得分:0)

如果要使用文件描述符而不是路径,则应使用 stat 函数或 fstat

#include <stdio.h>
#include <stdlib.h>  
#include <sys/stat.h>
int main()
{
    char *f = "test.ts";

    struct stat *buff = malloc(sizeof(struct stat));
    if (stat(f,buff) < 0)
    return 1;

    printf("Information for %s\n",f);

    printf("File Permissions: \t");
    printf( (S_ISDIR(buff->st_mode)) ? "d" : "-");
    printf( (buff->st_mode & S_IRUSR) ? "r" : "-");
    printf( (buff->st_mode & S_IWUSR) ? "w" : "-");
    printf( (buff->st_mode & S_IXUSR) ? "x" : "-");
    printf( (buff->st_mode & S_IRGRP) ? "r" : "-");
    printf( (buff->st_mode & S_IWGRP) ? "w" : "-");
    printf( (buff->st_mode & S_IXGRP) ? "x" : "-");
    printf( (buff->st_mode & S_IROTH) ? "r" : "-");
    printf( (buff->st_mode & S_IWOTH) ? "w" : "-");
    printf( (buff->st_mode & S_IXOTH) ? "x\n" : "-\n");

    return 0;
}