以下のコードにリダイレクト機能を追加したいです。
例えば
echo hello > hello.txt cat hello.txt hello
といった感じです。自分の考えとしてはargs[i]が「>」であった場合args[i+1]のファイルをオープンし、「>」の左側のコマンドをargs[i+1]のファイルに実行するという感じです。
下のコードでファイルオープンするところまで書いてみましたがそれ以降どのようにコードを書いていけば良いのでしょうか?
for(i=0; i<nargs; i++) { if(strcmp(args[i], ">") == 0) { int fd = open(args[i+1], O_WRONLY); if(fd < 0) die(args[i+1]); close(fd);
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<fcntl.h> #include<sys/types.h> #include<sys/wait.h> #define MAX_LINE_IN 1000 #define MAX_ARGS 30 #define NBUF 1 void die(const char *s) { perror(s); exit(1); } int main(int argc, char *argv[]) { int pid, status,i,j; char line_in[MAX_LINE_IN]; char *args[MAX_ARGS]; int nargs; for(;;){ printf("> "); if (fgets(line_in, MAX_LINE_IN, stdin) == NULL) exit(0); line_in[strlen(line_in) - 1] = '\0'; char *token = strtok(line_in, " "); nargs = 0; args[nargs++] = token; while( token != NULL){ if (token != NULL){ token = strtok(NULL, " "); args[nargs++] = token; } } args[nargs] = NULL; if(strcmp(args[0], "exit") == 0) exit(0); pid = fork(); if(pid < 0){ fprintf(stderr, "Error fork %d\n", getpid()); exit(EXIT_FAILURE); } else if(pid == 0){ for(i=0; i<nargs; i++) { if(strcmp(args[i], ">") == 0) { int fd = open(args[i+1], O_WRONLY); if(fd < 0) die(args[i+1]); close(fd); } } execvp(args[0], args); printf("Command Not Found.\n"); exit(1); } else{ wait(&status); } } return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/05/22 07:37
2021/05/22 07:43
退会済みユーザー
2021/05/22 07:46