The file mode, stored in the st_mode field of the file attributes, contains two kinds of information: the file type code, and the access permission bits. This section discusses only the type code, which you can use to tell whether the file is a directory, socket, symbolic link, and so on. There are two ways you can access the file type information in a file mode.
Command line execution
gcc -o know_file_type_using_stat know_file_type_using_stat.c $ ./know_file_type_using_stat helloworld.txt file type is : Regular file $ ./know_file_type_using_stat /dev/tty0 file type is : Character device $ ./know_file_type_using_stat /dev/sda1 file type is : Block device $ ./know_file_type_using_stat $PWD file type is : Directory Reference – https://www.gnu.org/software/libc/manual/html_node/Testing-File-Type.htmlImplementation details
Firstly, for each file type there is a predicate macro which examines a given file mode and returns whether it is of that type or not. Secondly, you can mask out the rest of the file mode to leave just the file type code, and compare this against constants for each of the supported file types. All of the symbols listed in this section are defined in the header file sys/stat.h. $ vim know_file_type_using_stat.c #include <stdio.h> #include <sys/stat.h> #include <stdlib.h> int main(int argc, char **argv) { struct stat *st; st = (struct stat *) malloc(sizeof(struct stat)); stat(argv[1], st); if(S_ISDIR(st->st_mode)) printf("file type is : Directory\n"); else if (S_ISCHR(st->st_mode)) printf("file type is : Character device\n"); else if (S_ISBLK(st->st_mode)) printf("file type is : Block device\n"); else if (S_ISREG(st->st_mode)) printf("file type is : Regular file\n"); else if (S_ISFIFO(st->st_mode)) printf("file type is : FIFO or Pipe\n"); else if (S_ISLNK(st->st_mode)) printf("file type is : Symbolic link\n"); else if (S_ISSOCK(st->st_mode)) printf("file type is : Socket\n"); return 0; } $ gcc -o know_file_type_using_stat know_file_type_using_stat.c $ ./know_file_type_using_stat helloworld.txt file type is : Regular file $ ./know_file_type_using_stat /dev/tty0 file type is : Character device $ ./know_file_type_using_stat /dev/sda1 file type is : Block device $ ./know_file_type_using_stat $PWD file type is : Directory Reference – https://www.gnu.org/software/libc/manual/html_node/Testing-File-Type.html
Gotchas and common issues
Permission checks - verify user access rights and sudo privileges before executing system-level operations.
Environment configuration - double-check path variables and dependency versions to prevent runtime failures.
Backup safeguards - maintain configuration backups before applying system or database modifications.
Following these steps ensures clean configuration and reliable execution for identify / test file types in linux using c program stat api.
Comments and corrections