Linux: поддержка файловых операций - PullRequest
2 голосов
/ 28 августа 2009

Кто-нибудь может быть хорошим источником, где описаны все доступные файловые операции, такие как fopen, fread, mkdir и т. Д.? Когда я работаю над файловыми операциями Linux, большинство страниц объясняют мне, как выглядит иерархия файловой системы.

Ответы [ 5 ]

5 голосов
/ 28 августа 2009

Функции, о которых вы спрашиваете, фактически подразделяются на несколько категорий: ввод-вывод файлового потока (fopen, fread и т. Д.), Ввод-вывод файлового дескриптора более низкого уровня (open, read) и т. д.) и манипуляция с файловой системой / каталогами (chown, mkdir и т. д.).

Обзор функций ввода-вывода файлового потока см. man stdio.

Для поиска в Google попробуйте "posix file api" вместо "операции с файлами linux".

Вы также можете проверить Руководство по GNU C Libary :

4 голосов
/ 28 августа 2009

Я не уверен, поможет ли это, но это прямо из исходного кода ядра:

struct file_operations {
    struct module *owner;
    loff_t (*llseek) (struct file *, loff_t, int);
    ssize_t (*read) (struct file *, char *, size_t, loff_t *);
    ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
    int (*readdir) (struct file *, void *, filldir_t);
    unsigned int (*poll) (struct file *, struct poll_table_struct *);
    int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
    int (*mmap) (struct file *, struct vm_area_struct *);
    int (*open) (struct inode *, struct file *);
    int (*flush) (struct file *);
    int (*release) (struct inode *, struct file *);
    int (*fsync) (struct file *, struct dentry *, int datasync);
    int (*fasync) (int, struct file *, int);
    int (*lock) (struct file *, int, struct file_lock *);
    ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
    ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
    ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
    unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};

Файловые системы обычно регистрируют все свои реализации для этих обратных вызовов.

1 голос
/ 31 августа 2009

Существует несколько API файловых операций на разных уровнях стека, например POSIX API, Стандартный C AP I, Linux VFS API (как упоминал Джереми) и FUSE API . Все API делают более или менее одно и то же, но детали очень разные.

Эти два API являются наиболее важными для обычного пользователя.

Хорошая книга на эту тему - " Расширенное программирование в среде UNIX" , автор Стивенс и Раго

1 голос
/ 28 августа 2009

Да - используйте справочные страницы. man fopen, man fread, man mkdir и т. Д. Описывают использование этих функций. На многих страницах руководства также есть раздел «См. Также», который направляет вас на страницы руководства по связанным функциям, что-то вроде примитивной Википедии. :)

0 голосов
/ 28 августа 2009

используйте man 2 open и man 2 mkdir. внизу этой страницы руководства находится название соответствующей команды.

В качестве альтернативы, если вы ищите версию этой справочной страницы, доступную для просмотра, вы можете попробовать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...