Я пытаюсь завершить свою функцию перенаправления вывода для назначения оболочки 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);
}
}