فایل sys/stat.h دارای تعدادی ماکرو است که برای پیدا کردن فرمت فایل بسیار مفیدند. معمولا ابتدا فیلد st_mode از ساختاری که سیستم‌کال stat برمی‌گرداند را با ثابت S_IFMT «اَند» بیتی می‌کنیم و سپس نتیجه حاصله را با مقادیر تعریف شده‌ای که هر کدام معرف یک نوع فایل است مقایسه می‌کنیم.

دانستن محتوای این ماکروها خالی از لطف نیست. برنامه ساده زیر این موضوع را بررسی می‌کند.

macros_value.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

int
main(int argc, char *argv[])
{
    int i;

    struct {
        char *name;
        int value;
    } arr[] = {
        { "S_IFMT"  ,  S_IFMT   },
        { "S_IFIFO" ,  S_IFIFO  },
        { "S_IFCHR" ,  S_IFCHR  },
        { "S_IFDIR" ,  S_IFDIR  },
        { "S_IFREG" ,  S_IFREG  },
        { "S_IFBLK" ,  S_IFBLK  },
        { "S_IFLNK" ,  S_IFLNK  },
        { "S_IFSOCK",  S_IFSOCK },
        { NULL      ,  0        }
    };


    for (i = 0; arr[i].name != NULL; i++) {
        printf("%-8s = %#X\n", arr[i].name, arr[i].value);
    }

    exit(EXIT_SUCCESS);
}

نحوه‌ی کامپایل و خروجی برنامه به صورت زیر است:

SHELL
$ gcc macros_value.c
$ ./a.out
S_IFMT   = 0XF000
S_IFIFO  = 0X1000
S_IFCHR  = 0X2000
S_IFDIR  = 0X4000
S_IFREG  = 0X8000
S_IFBLK  = 0X6000
S_IFLNK  = 0XA000
S_IFSOCK = 0XC000
نوشته شده در: 1402-02-18 (1 سال 6 روز 21 ساعت پیش)

من محسن هستم؛ برنامه‌نویس PHP و Laravel و Zend Framework و پایتون و فلسک، ولی بیشتر تمرکزم روی لاراول است. این سایت را اولین بار با فلسک نوشتم ولی بعد تصمیم گرفتم آن را با لاراول نیز پیاده‌سازی کنم. هم نسخه‌ی فسلک و هم نسخه‌ی لاراول را می‌توانید روی گیت‌هابم پیدا و دانلود کنید.

برای ارتباط با من یا در همین سایت کامنت بگذارید و یا به dokaj.ir(at)gmail.com ایمیل بزنید.

در مورد این مطلب یادداشتی بنویسید.