Linux C のアクセス関数の機能は、ファイルのアクセス許可を決定することです。この関数の構文は "int access(const char * pathname, int mode);" で、パラメータ "pathname" です。 " は、検出する必要があるファイルのパス名を表します。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux C アクセス機能の使用方法?
#linux C アクセス##【1】機能ファイルのアクセス権限を決定
【2】ヘッダファイル
###include <unistd.h>
int access(const char * pathname, int mode);
【4】パラメータの説明
Pathname: 検出するファイルのパス名モード: パラメータが0の場合、ファイルの存在を確認することを意味し、ファイルが存在する場合は0を返し、存在しない場合は-1を返します。
この関数は他のファイル属性もチェックできます:## 06 読み取りおよび書き込み権限の確認
04 読み取り権限の確認
02 書き込み権限の確認
01 実行権限の確認
00 ファイルの存在確認
【5】戻り値
チェック対象の権限がすべてチェックに合格した場合、A成功を示す値 0 が返され、1 つの許可が禁止されている限り、失敗を示す値 -1 が返されます。
#【6】機能説明
Access() は、既存のファイルが読み取り/書き込みできるかどうかを確認します。 パラメータ モードには、R_OK、W_OK、X_OK、および F_OK のいくつかの組み合わせがあります。
R_OK、W_OK、X_OK は、それぞれファイルに読み取り、書き込み、実行のアクセス許可があるかどうかを確認するために使用されます。 F_OK は、ファイルが存在するかどうかを判断するために使用されます。
access() はアクセス許可のみをチェックし、ファイル形式やファイルの内容には注意を払わないため、ディレクトリが「書き込み可能」と示されている場合は、そのディレクトリが書き込み可能であることを意味します。新しいファイルの作成などの操作は、このディレクトリをファイルとして扱えることを意味するものではありません。
たとえば、すべての DOS ファイルには「実行可能」権限があることがわかりますが、execve() で実行すると失敗します。
【7】エラーコード
EACCESS パラメーターのパス名で指定されたファイルは、必要なアクセス許可を満たしていません。テスト。
EROFS 書き込み権限をテストするファイルは読み取り専用ファイル システムに存在します。
EFAULT パラメータのパス名ポインタがアクセス可能なメモリ領域を超えています。
EINVAL パラメータ モードが正しくありません。
ENAMETOOLONG パラメータのパス名が長すぎます。
ENOTDIR パラメータのパス名はディレクトリです。
ENOMEM コア メモリが不足しています
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
【8】附加说明
使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。
【9】范例
// 范例1 #include <unistd.h> int main() { if (access("/etc/passwd", R_OK) == 0) printf("/etc/passwd can be read\n"); return 0; } // 范例2 #include#include <unistd.h> int file_exists(char *filename); int main(void) { printf("Does NOTEXIST.FIL exist: %s\n", file_exists("NOTEXISTS.FIL") ? "YES" : "NO"); return 0; } int file_exists(char *filename) { return (access(filename, 0) == 0); }
【10】相关函数
stat,open,chmod,chown,setuid,setgid
推荐学习:《linux视频教程》
以上がLinux Cアクセス機能の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。