Не могу получить dup2 для перенаправления вывода для моих собственных команд, но работает для execvp - PullRequest
0 голосов
/ 13 апреля 2020

В настоящее время я пытаюсь перенаправить вывод моей функции на p ie, но, похоже, он не работает. Все, что он делает, это просто выводит на экран pwd и ничего не делает для p ie .txt. Пытаюсь реализовать pwd > pie. Заранее спасибо! Я копирую пример redirect.c с этого сайта http://www.cs.loyola.edu/~jglenn/702/S2005/Examples/dup2.html. Если я копирую это точно, это работает. Но когда я пытаюсь сделать это с моей собственной командой, это не работает.

 void printWord(std::string cmd) {
    char c[cmd.size() + 1];
    std::copy(cmd.begin(), cmd.end(), c);
    c[cmd.size()] = '\0';
    write(STDIN_FILENO, &c, strlen(c));
}
void printPWD() {
    std::vector<char> buffer;
    std::string dir = getcwd(buffer.data(), buffer.size());
    printWord("\n" + dir + "\n");
}
int main () {
  int in, out;
  char *grep_args[] = { "grep", "cpp", NULL };

  // open input and output files

  out =
    open ("pie.txt", O_WRONLY | O_TRUNC | O_CREAT,
      S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);

  dup2 (out, 1);
  close (out);

  printPWD(); 
  return 0;
}

Попытка заставить pwd > pie работать.

...