Я пишу программу c, которая имитирует оболочку linux.C программирование - freopen append a? в filename
Для реализации перенаправления ввода/вывода с использованием символа перенаправления, то есть символа>, я использую freopen для замены stdout файлом, указанным пользователем. Если говорить команда:
environ > bla.txt
Моя оболочка будет печатать переменные среды в bla.txt файл вместо стандартный вывод.
Однако вместо создания файла «bla.txt» созданный файл «bla.txt?».
Может ли кто-нибудь решить тайну за? прилагается к имени файла?
Вот код для ввода/вывода только перенаправлением:
char *inFile;
pid_t pid;
int rc;
/* keep reading input until "quit" command or eof of redirected input */
while (!feof(stdin))
{
/* get command line from input */
if (fgets (buf, MAX_BUFFER, stdin)) // read a line
{
inFile = strstr(buf, ">"); // look for redirection arrow > in the command
if(inFile != NULL)
{
pid = fork();
if(pid == 0)
freopen(inFile+2, "w", stdout);
else if(pid == -1)
syserr("fork");
else
waitpid(pid,&rc,0);
}
}
}
Я попытался прибегая к помощи решения, но ничего не могу найти. Я также пробовал смотреть на другой вопрос stackoverflow, но не могу найти ответ.
Спасибо.
As (по существу) всегда, 'while (! feof (что угодно))' сломана. Вы хотите: 'while (fgets (...))'. –
@JerryCoffin, спасибо за совет! – ImNoob