Определить текущую позицию курсора в файле
#include <unistd.h>off_t tell( int filedes );off64_t tell64( int filedes );
libc
Функция tell() определяет текущую позицию в файле для любой последующей операции read() или write() (то есть любой последующей операции с небуферизованным файлом). Значение поля filedes - это дескриптор файла, возвращаемый успешным вызовом open().
Можно использовать возвращаемое значение в сочетании с lseek(),чтобы сбросить текущую позицию в файле.
Текущая позиция в файле, выраженная в виде количества байт от начала файла.
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
Значение 0
обозначает начало файла.
#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>char buffer[] = { "A text record to be written" };int main( void ){int filedes ;int size_written;/* open a file for output *//* replace existing file if it exists */filedes = open( "file", O_WRONLY | O_CREAT | O_TRUNC,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );if ( filedes != -1 ){/* print file position */printf( "%ld\n", tell( filedes ) );/* write the text */size_written = write( filedes, buffer, sizeof( buffer ) );/* print file position */printf( "%ld\n", tell( filedes ) );/* close the file */close( filedes );}return (EXIT_SUCCESS);}
Код генерирует следующий вывод:
$ ./a.out 0 28
tell() — ЗОСРВ «Нейтрино»; tell64() — Поддержка больших файлов
chsize(), close(), creat(), dup(), dup2(), eof(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fcntl(), fileno(), fstat(), isatty(), lseek(), open(), read(), sopen(), stat(), umask(), write()
Предыдущий раздел: Описание API системной библиотеки