我在前一个问题中问过管道的问题,让它工作得很好不过,我对输出重定向有一些疑问,比如shell中的>>通常会这样做网上似乎没有太多关于它的信息这是我目前所拥有的有没有更好/更简单的方法来做到这一点,它很混乱,我甚至不确定我是否理解它其中一部分是笔记中的伪代码,我填了一下,但我也不太确定。

void do_redirect(char** cmd, char** file) {
  int fds[2];
  int count;
  int fd;
  char i;
  pid_t pid;
  pipe(fds);
  //File Descriptors/pipe and redirecting char variables (i)
  //fd is used with the open command, basically stores the

  //Child 1
  if (fork() == 0) {
    //Open the file with read/write commands, 0_CREAT creates the file if it does not exist
    fd = open(file[0], O_RDWR | O_CREAT, 0777);
    dup2(fds[0], 0);

    //Close STDOUT
    close(fds[1]);

    //Read from STDOUT
    while ((count = read(0, &i, 1)) > 0)
    write(fd, &i, 1); // Write to file.

    exit(0);

  //Child 2
  } else if ((pid = fork()) == 0) {
    dup2(fds[1], 1);

    //Close STDIN
    close(fds[0]);

    //Output contents to the given file.
    execvp(cmd[0], cmd);
    perror("execvp failed");

  Parent
  } else {
    waitpid(pid, NULL, 0);
    close(fds[0]);
    close(fds[1]);
  }
}

最佳答案

如果您要找的是O_APPEND,则需要>>

关于c - C Shell中的输出重定向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3950894/

10-11 21:05