マニュアルページのerrnoの重複値

マニュアルページのerrnoの重複値

execveUbuntu 16.04では、libc関数のマニュアルページを見ています。

マニュアルページの説明に従ってエラーを処理しようとしています。

RETURN VALUE
On success, execve() does not return, on error -1 is returned, and errno is set appropriately.

だから、以下のエラーセクションを確認してみると、次のようになります。

ERRORS
   ...
   EACCES Search permission is denied on a component of the path prefix of filename or the name of a script interpreter.  (See also path_resolution(7).)

   EACCES The file or a script interpreter is not a regular file.

   EACCES Execute permission is denied for the file or a script or ELF interpreter.

   EACCES The filesystem is mounted noexec.
   ....

EACCES大丈夫という意味ですか?どのこんなこと?または確率が低いみんなその中には?

switchステートメントでエラーを処理するときにエラーをどのように区別しますか?

ベストアンサー1

これは、EACCESが次のいずれかであることを意味しますか?それとも可能性が低いですか?

どの。 「すべて」のパス巡回エラーがある場合ファイル巡回権限がない場合は、コードで「一般ファイルですか?」などの他の操作をどのように試すことができますか?複数のエラーを返すことは、実際にCがデフォルトで行うことではありません(エラーリストを含むいくつかの構造を作成し、呼び出し元にその構造へのポインタを返さない限り....これはほとんどの方法ではありません。システムコールが作成されます。)

switchステートメントでエラーを処理するときにエラーをどのように区別しますか?

strerror(errno)err(3)あるいは間違いなくniftyの逆呼び出しがstrerror得られる最大値に関するものです。

$ cat sirexecsalot.c
#include <err.h>
#include <string.h>
#include <unistd.h>
extern char **environ;
extern int errno;
int main(int argc, char *argv[])
{
    int ret;
    errno = 0;
    if ((ret = execve("/var/tmp/exectest/hullo", ++argv, environ)) == -1)
        err(1, "nope (strerr=%s)", strerror(errno));
}

$ make sirexecsalot
cc     sirexecsalot.c   -o sirexecsalot
$ cat /var/tmp/exectest/hullo
#!/usr/bin/env expect
puts hi

$ ./sirexecsalot
hi
$ mv /var/tmp/exectest/hullo /var/tmp/exectest/foo
$ mkdir /var/tmp/exectest/hullo
$ ./sirexecsalot              
sirexecsalot: nope (strerr=Permission denied): Permission denied
$ chmod 000 /var/tmp/exectest 
$ ./sirexecsalot             
sirexecsalot: nope (strerr=Permission denied): Permission denied
$ 

おすすめ記事