صفحه نخست | سیستم وبلاگ | در مورد من | twitter

نمایش مقادیر ماکروهای تعریف شده در sys/stat.h

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

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

#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);
}

خروجی برنامه به صورت زیر است:

$ ./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

 

کلیه حقوق برای دارنده‌ی سایت محفوظ است.