出于好奇,可以暂时添加一个应该被解释为EOF的角色吗?例如,在循环中使用read()系统调用,并通过将新行字符暂时注册为EOF使其在'\n'
上中止。
答案 0 :(得分:3)
不,不可能。如果你想从文件描述符中读取,直到你遇到一个特定的字符,并且避免读取任何文件描述符(例如,为了不消耗其他进程稍后需要的输入),唯一的解决方案是执行1字节读取。这很慢但是就是这样。
答案 1 :(得分:3)
不容易,但您可以使用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);
}
请注意,这仍然从原始文件描述符中读取,它只是为您缓冲数据。