A
Android
Original poster
Введение:
процессы наследуют UID и GID
восьмезначные разрешения: r = 4, w = 2, x = 1. Заказ это пользователь, группа, все остальные
функции обычно просто возвращают -1, чтобы указать на ошибку
более подробную информацию можно найти в extern int errno в <errno.h>
напечатать void perror (const char * str) в <stdio.h>
пример:
if (close (fd) == −1)
perror («закрыть»);
Файловый ввод / вывод
Открытие файлов:
fd = open (<путь>, флаги)
Создайте:
fd = открыть (файл, O_WRONLY | O_CREAT | O_TRUNC, 0664);
идентично
fd = creat (имя файла, 0644);
fd of -1 указывает на ошибку
чтение:
#include <unistd.h>
ssize_t read (int fd, void * buf, size_t len);
Вызов read () может привести ко многим возможностям, чтобы прочитать все байты
ssize_t ret;
while (len! = 0 && (ret = read (fd, buf, len))! = 0) {
if (ret == −1) {
if (errno == EINTR)
Продолжить;
perror («читать»);
перерыв;
}
len - = ret;
buf + = ret;
}
неблокирующие чтения могут быть достигнуты, передав O_NONBLOCK, чтобы открыть
если чтение заблокировано, оно вернет -1 и errno будет установлено в EAGAIN
записывать:
#include <unistd.h>
запись ssize_t (int fd, const void * buf, size_t count);
вызов fsync (int ft) для синхронизации записей в хранилище
fdatasync (int fd) делает то же самое без обновленных метаданных и работает быстрее
используйте флаг O_SYNC, чтобы всегда синхронизировать
закрытие:
#include <unistd.h>
int close (int fd) `
Ищу:
#include <sys / types.h>
#include <unistd.h>
off_t lseek (int fd, off_t pos, int origin);
Вы МОЖЕТЕ искать за концом файла, он будет заполнен нулями
позиция читает и пишет, чтобы избежать расы, связанной с поиском, а затем чтением
#define _XOPEN_SOURCE 500
#include <unistd.h>
ssize_t pread (int fd, void * buf, size_t count, off_t pos);
ssize_t pwrite (int fd, const void * buf, size_t count, off_t pos);
Мультиплексный ввод-вывод
poll () проще в использовании, чем select ()
оба ждут набора дескрипторов открытых файлов и возвращаются, когда они доступны
пример опроса
#include <stdio.h>
#include <poll.h>
#include <unistd.h>
int main (int argc, char ** argv)
{
struct pollfd fds [2];
fds [0] .fd = STDIN_FILENO;
fds [0] .events = POLLIN;
fds [1] .fd = STDOUT_FILENO;
fds [1] .events = POLLOUT;
int err = poll (fds, (nfds_t) 2, 0);
if (err == -1) {
PError ( "опрос");
возврат -1;
}
if (fds [0] .revents & POLLIN) {
printf ("STDIN готов \ n");
}
if (fds [1] .revents & POLLOUT) {
printf ("STDOUT ready \ n");
}
вернуть 0;
}
VFS предоставляет унифицированный интерфейс на основе блоков и inode для всех файловых систем.
Кэш страницы содержит извлеченную информацию, включая заголовки.