#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <filetype.h> /** * 指定されたパスの次の対応する種別シンボルを返します。 * pathname の情報を取得できない場合、'-' を返します。 * - r : 通常ファイル * - d : ディレクトリ * - c : キャラクタデバイス * - b : ブロックデバイス * - s : ソケット * - p : 名前付きパイプ * - l : シンボリックリンク * * @param pathname パス * @return 種別シンボル */ char filetype_get(const char* pathname) { struct stat st; char type_symbol = '-'; int ret = stat(pathname, &st); if (ret == 0) { // ファイル情報取得成功 int type = (st.st_mode & S_IFMT); switch (type) { case S_IFSOCK: type_symbol = 's'; break; case S_IFLNK: type_symbol = 'l'; break; case S_IFREG: type_symbol = 'r'; break; case S_IFBLK: type_symbol = 'b'; break; case S_IFDIR: type_symbol = 'd'; break; case S_IFCHR: type_symbol = 'c'; break; case S_IFIFO: type_symbol = 'p'; break; default: type_symbol = '-'; break; } } return type_symbol; } /** * 指定されたパスが存在するか否かを返します。 * * @param pathname パス名 * @return true/false (存在する/存在しない) */ bool is_exists(const char* pathname) { struct stat st; int ret = stat(pathname, &st); return (ret == 0); }