首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何向ls-al c程序添加权限?

如何向ls-al c程序添加权限?
EN

Stack Overflow用户
提问于 2019-06-21 02:02:45
回答 1查看 160关注 0票数 0

我正在编写使用c程序实现ls-al命令的代码,并且我已经获得了在没有打印权限的情况下实现它的代码,但我也想实现这些权限,但我不知道如何实现。有什么建议吗?我的代码如下

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <pwd.h>

// Last Modified
        time_t t = my_stat.st_mtime;
        localtime_r(&t, &lt);
        char timebuf[80];
        strftime(timebuf, sizeof(timebuf), "%c", &lt);
        if (pwd != 0) {
            printf("%s \t %ld \t %s \t %s", pwd->pw_name, (long)my_stat.st_size, timebuf, current_directory->d_name);
            printf("\n");
        } else {
            printf("%d \t %ld \t %s \t %s", my_stat.st_uid, (long)my_stat.st_size, timebuf, current_directory->d_name);
            printf("\n");
        }
    }
    closedir(directory);
    return 0;
}
int main(int argc, char* argv[]) {
    if ( argc == 1 ) {
        return list_dir ( "." );
    } else {
        int ret = 0;
        for (int i = 1; i < argc; i += 1 ) {
            if ( list_dir ( argv[i] ) != 0 ) {
                ret = 1;
            }
        }
        return ret;
    }
}

我让ben尝试了很长时间才能向这段代码添加权限,但我似乎被卡住了,在这里我失去了想法

我的代码的输出是:

代码语言:javascript
复制
kev      0   Thu Jun 20 13:39:49 2019    .
kev      0   Thu Jun 20 13:39:46 2019    ..
kev      24147   Thu Jun 20 12:24:40 2019    CMakeCache.txt
kev      0   Thu Jun 20 13:39:53 2019    CMakeFiles
kev      1426    Thu Jun 20 12:24:41 2019    cmake_install.cmake
kev      5160    Thu Jun 20 12:24:41 2019    Makefile

预期输出为:

代码语言:javascript
复制
rw-r--r--  1 kev     0   Thu Jun 20 13:39:49 2019    .
rw-r--r--  1 kev     0   Thu Jun 20 13:39:46 2019    ..
-rw-------       24147   Thu Jun 20 12:24:40 2019    CMakeCache.txt
rw-r--r--   kev      0   Thu Jun 20 13:39:53 2019    CMakeFiles
-rw-------  kev      1426    Thu Jun 20 12:24:41 2019 cmake_install.cmake
rw-r--r-- kev    5160    Thu Jun 20 12:24:41 2019    Makefile
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 02:41:37

您将希望使用struct statmode_t st_mode字段。

所有这些系统调用都返回一个stat结构,其中包含以下字段:

struct stat { dev_t st_dev;包含文件的设备的/* ID */ ino_t st_ino;/* inode编号*/ mode_t st_mode;/*文件类型和模式*/ nlink_t st_nlink;/*硬链接数*/ uid_t st_uid;所有者的/*用户ID */ gid_t st_gid;所有者的/*组ID */ dev_t st_rdev;/*设备ID (如果是特殊文件) */ off_t st_size;/*总大小,以字节为单位*/ blksize_t st_blksize;文件系统I/O的/*块大小*/ blkcnt_t st_blocks;/*分配的512B块的数量*/ /*从Linux2.6开始,内核支持以下时间戳字段的纳秒精度。有关Linux2.6之前版本的详细信息,请参阅说明。*/ struct timespec st_atim;/*上次访问时间*/ struct timespec st_mtim;/*上次修改时间*/ struct timespec st_ctim;上次状态更改的/*时间*/ #定义st_atime st_atim.tv_sec /*向后兼容性*/ #定义st_mtime st_mtim.tv_sec #定义st_ctime st_ctim.tv_sec };

..。

文件类型和模式(st_mode)

POSIX将与掩码S_IFMT (见下文)相对应的st_mode位作为文件类型,将与掩码07777相对应的12位作为文件模式位,并且将最低有效9位(0777)作为文件权限位。

为st_mode字段的文件类型定义了以下掩码值:

..。

为st_mode字段的文件模式部分定义了以下掩码值:

S_ISUID 04000设置用户ID位S_ISGID 02000设置组ID位(见下文) S_ISVTX 01000粘贴位(见下文) S_IRWXU 00700所有者具有读、写和执行权限S_IRUSR 00400所有者具有读权限S_IWUSR 00200所有者具有写权限S_IXUSR 00100所有者具有执行权限S_IRWXG 00070组具有读、写and execute权限S_IRGRP 00040组具有读取权限S_IWGRP 00020组具有写入权限S_IXGRP 00010组具有execute权限S_IRWXO 00007其他人(不在组中)具有读取、写入和执行权限S_IROTH 00004其他人具有读取权限S_IWOTH 00002其他人具有写入权限S_IXOTH 00001其他人具有执行权限

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56691583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档