*参照元 [#la934b18] #backlinks *説明 [#k3894d75] -パス: [[linux-2.6.33/fs/read_write.c]] -FIXME: これは何? --説明 **引数 [#wb06405f] -struct file *filep -- --[[linux-2.6.33/file]] -char __user *buf -- -size_t len -- -loff_t *ppos -- **返り値 [#ra180e4f] -ssize_t -- **参考 [#i48bec03] *実装 [#bd881cf9] ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) { struct iovec iov = { .iov_base = buf, .iov_len = len }; struct kiocb kiocb; ssize_t ret; - --[[linux-2.6.33/iovec]] - --[[linux-2.6.33/kiocb]] init_sync_kiocb(&kiocb, filp); kiocb.ki_pos = *ppos; kiocb.ki_left = len; - --[[linux-2.6.33/init_sync_kiocb()]] for (;;) { ret = filp->f_op->aio_read(&kiocb, &iov, 1, kiocb.ki_pos); if (ret != -EIOCBRETRY) break; -file->f_op は file_operations 型 --[[linux-2.6.33/file_operations]] wait_on_retry_sync_kiocb(&kiocb); - --[[linux-2.6.33/wait_on_retry_sync_kiocb()]] } if (-EIOCBQUEUED == ret) ret = wait_on_sync_kiocb(&kiocb); - --[[linux-2.6.33/wait_on_sync_kiocb()]] *ppos = kiocb.ki_pos; return ret; } EXPORT_SYMBOL(do_sync_read); -特にライセンスを区別せずシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] *コメント [#s574505d]