Linuxにディレクトリが存在するかどうかを確認し、存在しない場合はディレクトリを作成します

ファイルディレクトリを操作するとき、私たちはしばしば次の機能を考慮します:

1.ファイルが存在するかどうか、およびファイルが書き込み可能かどうか/ディレクトリが存在するかどうかを確認します

Linux下:

#include <unistd.h>

int access(const char * pathname、int mode);

パラメータの紹介:

戻り値:成功0、失敗-1

pathnameは、ファイルのパス名+ファイル名です。

モード:アクセスの役割を指定します。値は次のとおりです:

F_OK 值为0,判断文件是否存在
 
X_OK 值为1,判断对文件是可执行权限
 
W_OK 值为2,判断对文件是否有写权限
 
R_OK 值为4,判断对文件是否有读权限
 
注:后三种可以使用或“|”的方式,一起使用,如W_OK|R_OK

C ++(標準C ++):

ヘッダーファイル:<io.h>

関数プロトタイプ:int _access(const char * pathname、int mode);

パラメータ:pathnameはファイルパスまたはディレクトリパス、modeはアクセス権限です(異なるシステムで使用できないマクロ定義によって再定義される場合があります)

戻り値:ファイルに指定されたアクセス許可がある場合、関数は0を返します。ファイルが存在しないか、指定された許可にアクセスできない場合、関数は-1を返します。

備考:pathnameがファイルの場合、_access関数はファイルが存在するかどうかを判断し、mode値で指定されたモードでファイルにアクセスできるかどうかを判断します。pathnameがディレクトリの場合、_accessは、指定されたディレクトリが存在するかどうかのみを判断します。WindowsNTおよびWindows 2000では、すべてのディレクトリに読み取りおよび書き込み権限のみがあります。

モードの値と意味は次のとおりです。

00-ファイルが存在するかどうかのみを確認します

02-書き込み許可

04-読み取り許可

06-読み取りおよび書き込み権限

注: int access(const char * pathname、int mode);を使用して、そのようなファイルまたはディレクトリがあるかどうかを判断します。ファイルかディレクトリかはわかりません。

int stat(const char * file_name、struct stat * buf);を使用して、ファイルまたはディレクトリが存在するかどうかを確認します。st_modeを取得して、それがディレクトリファイルであるかどうかを確認します。 
    stat()システムコールは、成功したかどうかを確認するために使用されます。失敗した場合は存在しません。成功した場合は、返されたst_modeがフォルダーであるかどうかが判断されます。

2.ディレクトリが存在するかどうかを確認します

opendirを使用して判断できます。これは、比較的簡単な方法です。

 #include <sys / types.h>
 #include <dirent.h>

DIR * opendir(const char * name);

3. Linuxでmkdir関数、ディレクトリを作成します

ヘッダーファイルライブラリ:

#include <sys / stat.h>

#include <sys / types.h>

関数プロトタイプ:

int mkdir(const char * pathname、mode_t mode);

機能の説明:

mkdir()関数は、modeのパラメーターpathnameにちなんで名付けられたディレクトリーを作成し、modeは新しく作成されたディレクトリーの許可を定義します。

戻り値:

ディレクトリが正常に作成された場合は0を返し、そうでない場合は-1を返し、グローバル変数errnoにエラーを記録します。

モードの値は次のとおりです:

S_IRWXU 00700権限。これは、ファイルの所有者が操作の読み取り、書き込み、および実行の権限を持っていることを意味します。
S_IRUSR(S_IREAD) 00400権限。これは、ファイルの所有者が読み取り可能な権限を持っていることを意味します
S_IWUSR(S_IWRITE) 00200権限。これは、ファイルの所有者が書き込み可能な権限を持っていることを意味します。
S_IXUSR(S_IEXEC) 00100権限。これは、ファイルの所有者が実行権限を持っていることを意味します。
S_IRWXG 00070権限。これは、ファイルユーザーグループが操作の読み取り、書き込み、および実行の権限を持っていることを意味します。
S_IRGRP 00040権限。これは、ファイルユーザーグループに読み取り可能な権限があることを意味します。
S_IWGRP 00020パーミッション。これは、ファイルユーザーグループに書き込み可能なパーミッションがあることを意味します。
S_IXGRP 00010権限、これはファイルユーザーグループが実行権限を持っていることを意味します
S_IRWXO 00007権限。これは、他のユーザーが操作の読み取り、書き込み、および実行を行う権限を持っていることを意味します。
S_IROTH 00004権限。これは、他のユーザーが読み取り可能な権限を持っていることを意味します
S_IWOTH 00002権限。これは、他のユーザーが書き込み可能な権限を持っていることを意味します
S_IXOTH 00001権限、つまり他のユーザーが実行権限を持っている
int32_t OpendirAndMkdir(const char * pathname)
{
	int ret = 0;
	DIR * mydir = NULL;
	if ((mydir = opendir(pathname)) == NULL)
	{
		ret = mkdir(pathname, 0755);
		if (ret != 0) return -1;

		printf("%s created sucess!/n", pathname);
	}
	else
	{
		printf("%s exist!/n", pathname);
	}
	return ret;
}

 

 

おすすめ

転載: blog.csdn.net/Swallow_he/article/details/109639047