Перенаправить стандартный ввод во временный файл?
Я хочу, чтобы stdin был перенаправлен на строку текста, поставляемую в моей программе. Я хочу записать строку текста во временный файл, а затем указать stdin на этот файл. Я немного не уверен в этом коде, потому что он, кажется, смешивает вызовы функций низкого уровня, такие как write()
а также dup()
с вызовами функций более высокого уровня, таких как fclose()
, Это правильный подход?
char* buffer = "This is some text";
int nBytes = strlen(buffer);
FILE* file = tmpfile();
int fd = fileno(file);
write(fd,buffer,nBytes);
rewind(file);
dup2(fd,0);
fclose(file);
РЕДАКТИРОВАТЬ
Согласно предложению в комментариях, я попытался подойти к этой проблеме с трубами. Если я хочу использовать трубы, это будет правильный подход? Я все еще хочу отзывы о первом подходе:
int fd[2];
pipe(fd); // For sake of simplicity assume returns 0 (no error).
char* buffer = "This is some text";
int nBytes = strlen(buffer);
write(fd[1],buffer,nBytes);
close(fd[1]);
dup2(fd[0],0);
close(fd[0]);