linux Cのaccess関数
1183 ワード
アクセス():ファイルへのアクセス権限があるかどうかを判断する
相関関数open,chmod,chown,setuid,setgid,statヘッダファイル#include定義関数int access(const char*pathname,intmode);関数説明access()は、既存のファイルを読み取り/書き込みできるかどうかをチェックします.パラメータmodeはいくつかのケースの組み合わせがあり、R_OK,W_OK,X_OKとF_OK.R_OK,W_OKとX_OKは、ファイルに読み取り、書き込み、実行の権限があるかどうかを確認するために使用されます.F_OKは、そのファイルが存在するか否かを判断するためのものです.アクセス()は権限のチェックのみを行い、ファイルの形態やファイルの内容を気にしないため、ディレクトリが「書き込み可能」であれば、このディレクトリで新しいファイルを作成できるなどの操作を示すのではなく、このディレクトリがファイルとして処理できることを意味する.たとえば、DOSのファイルには実行可能権限がありますが、execve()で実行すると失敗します.戻り値チェックしたいすべての権限がチェックに合格した場合は0値を返し、成功を示し、禁止されている権限が1つあれば-1を返します.エラーコードEACCESSパラメータpathnameで指定されたファイルは、要求されたテストの権限に合致しません.EROFSが書き込み権限をテストしようとするファイルは、読み取り専用ファイルシステム内に存在する.EFAULTパラメータpathnameポインタがアクセス可能メモリ領域を超えています.EINVALパラメータmodeが正しくありません.ENAMETOOLONGパラメータpathname長すぎます.ENOTDIRパラメータpathnameはディレクトリです.ENOMEMコアメモリ不足ELOOPパラメータpathnameにマルチシンボル接続の問題がある.EIO I/Oアクセスエラー.追加の説明ユーザー認証の判断にaccess()を使用するには、access()の後にopen()の空のファイルを作成すると、システムのセキュリティ上の問題を引き起こす可能性があるなど、特に注意してください.
例
実行/etc/passwd can be read
相関関数open,chmod,chown,setuid,setgid,statヘッダファイル#include
例
#include<unistd.h>
int main()
{
if(access(“/etc/passwd”,R_OK) == 0)
printf(“/etc/passwd can be read
”);
}
実行/etc/passwd can be read