فایل 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 ماه 1 هفته پیش)

من محسن هستم؛ برنامه‌نویس سابق PHP و Laravel و Zend Framework و پایتون و فلسک. تمرکزم بیشتر روی لاراول بود! الان از صفر مشغول مطالعات اقتصادی هستم.

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

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