strtok と dup2 を使用してあるファイルを別のファイルにリダイレクトする必要があるプログラムを作成する必要がありますが、実際にコマンド cat < file1 > file2 をシェルからではなく、代わりにユーザーに入力させる必要があります。私のプログラムを使用して。そのため、strtok が必要です。そして、私のプログラムが動かない理由は、おそらくそれが原因で、strtok がどのように機能するかをよく理解していないからです。インターネットで同様のプログラムを見つけましたが、ls コマンドを使用してファイルにリダイレクトするだけです。それでおしまい。私のプログラムはもっと複雑です。つまり、シェル内で cat < file1 > file2 と言う方が簡単だったのですが、何らかの理由でこのようにする必要があります。とにかく、ここに私がこれまでに持っているものがあります(ここでは、インターネットで見つけたものと以前から持っていたものを組み合わせただけです. 同様のことを行う必要がありましたが、ユーザーは ls または ls -l を実行するだけでした。とてもシンプルなもの。少なくとも私にとっては、これははるかに困難です。)
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/wait.h>
#include <string.h>
int main() {
pid_t pid;
char line[256];
char *args[129];
int i;
int fd;
int status;
char *temp;
while (1) {
printf(">");
if (fgets(line, 256, stdin) == 0) {
exit(0);
}
else {
pid = fork();
if (pid == 0) {
i = 0;
temp = strtok("<",line);
while (temp != NULL) {
args[i++] = temp;
temp = strtok(">",line);
args[i] = '\0';
}
fd = open("hello", O_RDONLY);
dup2(fd, STDIN_FILENO);
fd = open("world", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
dup2(fd, STDOUT_FILENO );
close(fd);
execvp(args[0], args);
}
else {
close(fd);
wait(&status);
}
}
}
}
どんな助けでも大歓迎です。