này nghe có vẻ như một câu hỏi kỳ quặc, nhưng khi tôi đi và mở một file:Có bao nhiêu thông tin thực sự được lưu trữ trong một bộ mô tả tệp?
int fd;
fd = open("/dev/somedevice", O_RDWR);
chính xác tôi nhận được gì trở lại? Tôi có thể thấy trang người đàn ông nói:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
Nhưng phải không? Có phải chỉ là một số int
hoặc có dữ liệu được đính kèm sau hậu trường không? Lý do tôi hỏi là tôi tìm thấy một số mã (Linux/C), nơi chúng tôi đang mở các tập tin từ user space:
//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) {
sau đó vào cuối kernel, các hoạt động tập tin cho mô-đun này (mà nguồn cung cấp fd) bản đồ đọc đến n_read()
chức năng:
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
Sau đó mô tả tập tin được sử dụng trong n_read()
, nhưng nó được truy cập để lấy dữ liệu:
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
Vì vậy ... tôi fi Hình vẽ những gì đang xảy ra ở đây là một trong hai:
A) một bộ mô tả tập tin trở về từ open()
chứa nhiều dữ liệu hơn là chỉ một giá trị số nguyên mô tả
Hoặc
B) ánh xạ giữa một cuộc gọi đến "đọc" trong không gian sử dụng isn' t đơn giản như tôi đang làm cho nó ra được và có một số mã mất tích trong phương trình này.
Bất kỳ đầu vào nào có thể giúp hướng dẫn tôi?
'FQuit' được khai báo ở đâu? Và có mô tả tập tin chỉ là số nguyên. Bất kỳ thông tin nào về chúng đều phải được lấy bằng một cuộc gọi hệ thống từ bảng mô tả tệp hạt nhân. –
@ user1700513 - bạn có thể giả sử 'fQuite' là 0. – Mike