Не легко, но возможно, что вы могли бы что-то сделать с 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);
}
Обратите внимание, что это все еще читает из исходного дескриптора файла, он просто буферизует данные для вас.