Strace - ファイル記述子3

Strace - ファイル記述子3

ここでは、ファイル記述子番号3が何を意味するのかわかりません。この記述子は、datlog.txtファイルを取得するためのハードドライブ接続を指すポインタの一種ですか?私はサブルーチンclose()がこの整数をコードのパラメータとして取るのでそう思います。それとも記述子がファイルが格納されているメモリのバッファを指していますか?

 open("datalog.txt", O_RDONLY)              = 3
 read(3, "Hello World!!!!!!\n", 250)     = 18
 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 3), ...}) = 0
 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,   0) = 0x7f3f71a10000
 write(1, "Read Hello World!!!!!!\n", 23) = 23
 write(1, "\n", 1)                       = 1
 close(3)                                = 0
 exit_group(0)                           = ?
 +++ exited with 0 +++

答え1

ストレスショーシステムコール、これはGNU / LinuxのC関数です。これはデフォルトのCライブラリによって公開され、すべての実行プロセスは何らかの方法でそれを使用する必要があります。実際のCコードはそれを直接呼び出すか、通常はシステム呼び出し自体に非常に直接対応するAPIラッパー関数を使用できます。

これは、署名が一般的に同じであるため、そのAPI関数のドキュメントを見ると、ほとんどのシステムコールを復号化できることを意味します。たとえば、

open("datalog.txt", O_RDONLY)

以下は、All System Calls 1のマニュアルのセクション2open()のGNU C署名です。man 2 open

int open(const char *pathname, int flags);

Cを使用しない場合は、文字列パス、整数フラグ(この場合は読み取り専用を意味O_RDONLY)を使用して整数を返します。

整数はファイル記述子他の低レベルのC入力/出力機能で使用されます。たとえば、read()Straceはこの場合、次の値を表示します=open()サム。これはPOSIX / GNU C署名ですread()

ssize_t read(int fd, void *buf, size_t count);

最初のパラメーターは整数ファイル記述子です。


1.「システムコール」という用語は通常同じであるため、実際のシステムコールまたはライブラリのAPIラッパー関数を明確に表します。セクション 2 は実際に後者の文書です。技術的にはGNU APIですが、次のようなものではありません。POSIX、公式文書もあります。例えば、これはopen()。すべての*nixシステムはGNU Cライブラリを使用しているわけではありませんが、すべて同等の機能を持ち、上記のロジックはまだ適用されます。

関連情報