これは、私が行っている一連の演習の 1 つのステップです。私が書くプログラムは、3 つ以上の引数を取る必要があります。最初の引数の使用はまだ実装されていません。残りの引数はディレクトリのリストです。
このステップでは、引数で指定されたディレクトリごとに cat のインスタンスを作成し、cat を使用して各ディレクトリのすべてのファイルの内容を取得し、内容を出力する必要があります。/home/directory と /home/directory/ の両方のパスを処理できるはずです (最後の / がある場合とない場合)。
現在私がやっていることは、指定されたディレクトリ内のすべてのファイルを読み取り、それらのコンテンツを返すように、引数 /home/directory/* を指定して cat を実行しようとしています。これは私のコードです:
#include "Step1.h"
int main(int argc,char* argv[])
{
if(argc < 3)
{
printf("Usage: ./Step1 <exclusions file> <folder1> <folder2> <folder3> ...\n");
return -1;
}
int i;
for(i=2; i<argc; i++)
{
int catpipe[2];
if(pipe(catpipe))
{
printf("Error in pipe\n");
return -1;
}
pid_t pid = fork();
if(pid < 0)
{
printf("Error in fork\n");
return -1;
}
if(!pid)
{
dup2(catpipe[1],1); // cat pipe is used to get the output of cat program into this program.
close(catpipe[1]);
close(catpipe[0]);
char* args[3];
args[0] = "/bin/cat";
int length = strlen(argv[i]);
char* path;
if(argv[i][length - 1] != '/') // the path given does not have the ending /
{
path = malloc(length + 3);
strcpy(path,argv[i]);
path[length] = '/'; //append / at the end
path[length+1] = '*'; // append * at the end
path[length+2] = '\0';
}
else
{
path = malloc(length + 2); // the path contains the ending /
strcpy(path,argv[i]);
path[length] = '*'; // append * at the end
path[length+1] = '\0';
}
args[1] = path;
args[2] = NULL;
printf("%s\n",path);
execvp("/bin/cat",args);
}
close(catpipe[1]);
char buffer[200];
int total = read(catpipe[0],buffer,200); // read the output of cat program and print it.
buffer[total]='\0';
printf("The buffer contains: %s\n",buffer);
}
return 0;
}
このコードを次のように実行しました。
mod@mod-Inspiron-N5110:~/project$ ./Step1 exclusions ./testdirectory1 ./testdirectory2/
私が得た結果は次のとおりです。
/bin/cat: ./testdirectory1/*: No such file or directory
The buffer contains:
The buffer contains: ./testdirectory2/*
mod@mod-Inspiron-N5110:~/project$ /bin/cat: ./testdirectory2/*: No such file or directory
mod@mod-Inspiron-N5110:~/project$
しかし、私がするとき:
mod@mod-Inspiron-N5110:~/project$ /bin/cat ./testdirectory1/*
結果は次のとおりです。
Testline 1 of testfile1 in testdirectory1
Test line 1 of testfile1 in testdirectory1
Testline 1 of testfile2 in testdirectory1
Testline 1 of testfile3 in testdirectory1
私のプログラムでこの結果を得るのを手伝ってください。
前もって感謝します