これは奇妙な質問のように聞こえるかもしれませんが、ファイルを開いてみると次のようになります。
int fd;
fd = open("/dev/somedevice", O_RDWR);
私は正確に何を取り戻していますか?私はmanページが言うのを見ることができます:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
しかし、それはそれですか?それは単なるものint
ですか、それとも舞台裏でそれに添付されたデータがありますか?私が尋ねている理由は、ユーザースペースからファイルを開いているコード(Linux / C)を見つけたからです。
//User space code:
int fdC;
if ((fdC = open(DEVICE, O_RDWR)) < 0) {
printf("Error opening device %s (%s)\n", DEVICE, strerror(errno));
goto error_exit;
}
while (!fQuit) {
if ((nRet = read(fdC, &rx_message, 1)) > 0) {
次に、カーネル側で、このモジュール(fdを提供する)マップのファイル操作がn_read()
関数に読み込まれます。
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
次に、ファイル記述子がで使用されn_read()
ますが、データを取得するためにアクセスされています。
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
だから...私はここで何が起こっているのかを理解しています:
A)から返されるファイル記述子にはopen()
、単なる説明的な整数値よりも多くのデータが含まれています。
または
B)ユーザースペースでの「読み取り」の呼び出し間のマッピングは、私が考えているほど単純ではなく、コードがいくつかあります。この方程式にはありません。
私を導くのに役立つかもしれない入力はありますか?