Оболочка, написанная на C, имеет ошибку перенаправления вывода: ошибка сегментации - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь завершить свою функцию перенаправления вывода для назначения оболочки C.Однако при вводе такой команды, как: echo hello world> test.txt, моя оболочка завершается с ошибкой сегментации, которая, как я подозреваю, является строкой: args [i] = strtok (NULL, "") Я не верю, что яNULL правильно завершает массив аргументов.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include "execute.h"
#include "parser.h"

#define ReadFd 0
#define WriteFd 1

void outred(char ** args, char * filename, int pos){

   pid_t pid;
  int fd[2];//array of two for each file descriptor

  int buffer_size = BUFFSIZE;
  int status;

  //only want tokens before the ">" metacharacter
  int i;
  for(i = 0; i < pos; i++;){
    args[i] = args[i];
  }
  args[i] = strtok(NULL," ");

pid = fork();

  if(pid == 0){//If in child process execute the cmd to write to the file

 close(fd[ReadFd]);//child recieves fds from parent
 fd[WriteFd] = creat(filename, 0644);//create file

 dup2(fd[WriteFd],fileno(stdout));//duplicate write end to stdout, output to stdout goes to write end instead

 close(fd[WriteFd]);//new execution will write to stdout which is being redirected to fd[WriteFd] so it can be closed

    execvp(args[0],args);//execute cmd on args

  }

  if(pid < 0){
    perror("ERROR: output redirect failed");//no execution 
    exit(0);
    }

  if(pid > 0){
    close(fd[WriteFd]);    
    wait(&status);

  }
}
...