Newer
Older
access-test / modules / src / filetype.c
Nomura Kei on 30 Nov 2022 1 KB from svn
#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);
}