2つのLinuxファイル属性


まえがき(目次を含む)


statおよびlstat

statコマンドの使用:
ここに画像の説明を挿入

/**
 * @author IYATT-yx
 * @brief 获取文件部分属性
 */
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char **argv)
{
    
    
    if (argc != 2)
    {
    
    
        printf("请指定一个参数为要查询大小的文件!\n");
        return -1;
    }

    struct stat st;
    int ret = stat(argv[1], &st);
    if (ret == -1)
    {
    
    
        perror("stat");
        return -1;
    }
    printf("%s的大小为%ld\n", argv[1], st.st_size);

    // 文件类型, 1法
    if (S_ISREG(st.st_mode))
    {
    
    
        printf("1@这是一个普通文件\n");
    }
    else if (S_ISDIR(st.st_mode))
    {
    
    
        printf("1@这是一个目录文件\n");
    }
    else if (S_ISLNK(st.st_mode))
    {
    
    
        printf("1@这是一个符号链接文件\n");
    }
    else if (S_ISSOCK(st.st_mode))
    {
    
    
        printf("1@这是一个套接字文件\n");
    }
    else if (S_ISBLK(st.st_mode))
    {
    
    
        printf("1@这是一个块设备文件\n");
    }
    else if (S_ISCHR(st.st_mode))
    {
    
    
        printf("1@这是一个字符设备文件\n");
    }
    else if (S_ISFIFO(st.st_mode))
    {
    
    
        printf("1@这是一个管道文件\n");
    }

    // 文件类型, 2法
    int type = st.st_mode & S_IFMT;
    switch (type)
    {
    
    
        case S_IFREG:
            printf("2@这是一个普通文件\n");
            break;
        case S_IFDIR:
            printf("2@这是一个目录文件\n");
            break;
        case S_IFLNK:
            printf("2@这是一个符号链接文件\n");
            break;
        case S_IFSOCK:
            printf("2@这是一个套接字文件\n");
            break;
        case S_IFBLK:
            printf("2@这是一个块设备文件\n");
            break;
        case S_IFCHR:
            printf("这是一个字符设备文件\n");
            break;
        case S_IFIFO:
            printf("这是一个管道文件\n");
            break;
        default:
            break;
    }
}

上記のstat関数のも同様lstatで、fstat主な違いは、クエリがソフトリンクファイルの場合のstatとlstatソフトリンクファイルの使用です。statはクエリに侵入してソフトリンクポイントをファイルしますが、lstatはチェックできます。ソフトリンクされたファイル自体の属性。fstatは主にパラメーターの違いです。statとlstatはどちらもファイル名で照会され、fstatは開いているファイルの戻り値ファイル記述子でman照会されます。特定の情報はコマンド照会できます。また、statファミリーの関数はls -l、ほぼ同じように表示されるファイル属性とコンテンツをチェックできることにも注意してください

stat構造

struct stat
{
    
    
    // 文件的设备编号
    dev_t   st_dev;
    // 节点
    ino_t   st_ino;
    // 文件的类型和存取的权限
    mode_t  st_mode;
    // 链到该文件的硬链接数目
    nlink_t st_nlink;
    // 用户ID
    uid_t   st_uid;
    // 组ID
    gid_t   st_gid;
    // (设备类型)若此文件为设备文件,则为其设备编号
    dev_t   st_rdev;
    // 文件字节数
    off_t   st_size;
    // 块大小 (文件系统的I/O缓冲区大小)
    blksize_t   st_blksize;
    // 块数
    blkcnt_t    st_blocks;
    // 最后一次访问时间
    time_t  st_atime;
    // 最后一次内容修改时间
    time_t  st_mtime;
    // 最后一次属性修改时间
    time_t  st_ctime;
};

st_mode(16ビット整数)

  • 0〜2人oその他のユーザー
S_IROTH 00004 読んだ
S_IWOTH 00002 書く
S_IXOTH 00001 実施した
S_IRWXO 00007 o以外の権限をマスク、フィルタリングする

※3〜5桁はユーザーグループに属します
S_IRGRP 00040 読んだ
S_IWGRP 00020 書く
S_IXGRP 00010 実施した
S_IRWXG 00070 g以外の権限をマスク、フィルタリングする

* 6〜8uのファイル所有者
S_IRUSR 00400 読んだ
S_IWUSR 00200 書く
S_IXUSR 00100 実施した
S_IRWXU 00700 u以外の権限をマスク、フィルタリングする

* 12〜15ビットのファイルタイプ
S_IFSOCK 0140000 ソケット
S_IFLNK 0120000 シンボリックリンク(ソフトリンク)
S_IFREG 0100000 通常のファイル
S_IFBLK 0060000 ブロックデバイス
S_IFDIR 0040000 目次
S_IFCHR 0020000 キャラクターデバイス
S_IFIFO 0010000 パイプライン
S_IFMT 0170000 フラッドコード、非ファイルタイプ情報のフィルタリング




/**
 * @author IYATT-yx
 * @brief 检测文件属性: 存在,读,写,操作
 */
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    
    
    if (argc != 2)
    {
    
    
        printf("请指定一个参数为要查询的文件!\n");
        return -1;
    }

    if (access(argv[1], F_OK) == -1)
    {
    
    
        perror("access");
        return -1;
    }
    else
    {
    
    
        if (access(argv[1], R_OK) == 0)
        {
    
    
            printf("R");
        }
        if (access(argv[1], W_OK) == 0)
        {
    
    
            printf("W");
        }
        if (access(argv[1], X_OK) == 0)
        {
    
    
            printf("X");
        }
        printf("\n");
    }
}




ファイルのアクセス許可の変更:chmodfunction
ファイルの所有者またはグループの変更chownfunction
ファイルサイズの変更truncatefunction
開いているファイルの属性の変更:fcntlfunction

おすすめ

転載: blog.csdn.net/weixin_45579994/article/details/112726701