2

我正在创建一个程序来管理 tar 文件。我使用 struct stat 打印文件的权限:

printf("%d\n", buff->st_mode); /* I get a number like 33152 */

但我需要在 struct header 的模式[8] 中设置权限:

typedef struct  s_head
{
    char        name[100];
    char        mode[8];
    char        uid[8];
    char        gid[8];
    char        size[12];
    char        mtime[12];
    char        chksum[8];
    char        linkflag;
    char        linkname[100];
    char        magic[8];
    char        uname[32];
    char        gname[32];
    char        devmajor[8];
    char        devminor[8];
}               t_head;

当我打印模式时,我应该得到类似 000600 的东西(对于 rw-------),但是我怎样才能用正确的书写方式将我的 st_mode 转换为 char *

4

1 回答 1

0

使用八进制。

OP 的数字是int33152。通过将其打印为八进制数,通常的“rwx”设置更加明显: 100600 。

// printf("%d\n", buff->st_mode); // OP gets a number like 33152
printf("%o\n", buff->st_mode);    // 100600
snprintf(s_head.mode, sizeof(s_head.mode), "%06o", buff->st_mode); // "100600"
于 2013-09-22T05:21:16.367 回答