1. ホーム
  2. c

[解決済み] カーネルレベルからsys_openを使用する

2022-03-04 17:46:48

質問

こんにちは、私はsys_openを使用する際にいくつかの問題を抱えています。この時点で、私は関数の引数で何か間違ったことをしていると思い始めています。 私がどのようにそれを使用するかの例です。

fd = sys_open("file.txt" , O_WRONLY | O_CREAT, 0);
sys_write(fd, "test\n", strlen("test\n"));
sys_fsync(fd);
sys_fdatasync(fd);
sys_close(fd);

fd の値は負でない整数(0)です。 すべての関数が0を返すので、それらはcorectlyに実行されていると思います。 このような場合、私は、そのファイルを見つけることができないのですが、私のコードの何かが間違っているのでしょうか?

どうすればいいですか?

その sys_ Linux用関数ファミリーの検討 現在では非推奨 . ただし、この質問の趣旨からすると sys_open はユーザーレベルの関数で open を呼び出すと、カーネルレベルの do_sys_open() で定義された後者の2つです。 fs/open.c . したがって、カーネル内からファイルを開くには、ユーザーレベルの関数ではなく、カーネルレベルの関数に固執する必要があります。

以下はその回答です。 カーネルレベルでファイルを開くことについて、そのうちのいくつかは非推奨なので、注意してください。