#include #include #include char **redir_chop(const char *, const char); /* chops a line into 2 string that are seperated by redir_delim */ char **redir_chop(const char *line, const char redir_delim) { if (!line) return NULL; const char *delim = &redir_delim; char *pipe_redir = strpbrk(line, delim); if (pipe_redir == NULL) return NULL; size_t redir_delta = pipe_redir - line; char **ret = (char **) malloc(sizeof(char *) * 2); ret[0] = (char *) malloc(sizeof(char) * 256 * 2); ret[1] = ret[0] + 256; char *former = ret[0]; char *latter = ret[1]; strncpy(former, line, redir_delta); former[redir_delta] ='\0'; /* delete spaces at the end of former string */ int i = strlen(former) - 1; while (former[i] == ' ') former[i--] = '\0'; /* skip spaces in latter string and then copy over */ int j = redir_delta; while (line[++j] == ' ') ; strncpy(latter, line+j, (line + strlen(line)) - pipe_redir); return ret; } int main(int argc, char *argv[]) { const char *line = "ls -1 -al > filename.txt"; char **chopped = redir_chop(line, '>'); printf("former string: \"%s\"\n", chopped[0]); printf("latter string: \"%s\"\n", chopped[1]); free(chopped); return 0; }