Определить EOF персонажа - PullRequest
       1

Определить EOF персонажа

1 голос
/ 22 марта 2012

Из любопытства можно ли временно добавить персонажа, который следует интерпретировать как EOF?Например, используя системный вызов read () в цикле и прервав его на '\n', временно зарегистрировав символ новой строки как EOF.

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Не легко, но возможно, что вы могли бы что-то сделать с fdopen() и пользовательской функцией:

int freadtochar(char *buffer, int size, char character, FILE *filePtr)
{
    int index = 0;
    char c;
    while (index < size && (c = fgetc(filePtr)) != EOF && c != character)
    {
        buffer[index++] = c; 
    }

    return index;
} 

int main()
{
    int fd = STDIN_FILENO;

    FILE *filePtr = fdopen(dup(fd), "r");

    char buffer[1024];
    int bytesRead = freadtochar(buffer, 1024, '\n', filePtr);

    // buffer should now contain all characters up to '\n', but note no trailing '\0' is added
    fclose(filePtr);
}

Обратите внимание, что это все еще читает из исходного дескриптора файла, он просто буферизует данные для вас.

3 голосов
/ 22 марта 2012

Нет, не возможно.Если вы хотите читать из файлового дескриптора до тех пор, пока не встретите определенный символ, и избегаете читать что-либо после него (например, чтобы не использовать ввод, необходимый позже другому процессу), единственное решение - выполнить однобайтовое чтение.Это медленно, но так оно и есть.

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