初心者はこちら!
cat
以下の私のプログラムは、Linux で (少し) コマンドのように振る舞おうとしています。
引数が指定されていない場合は、ユーザーからの入力を受け取り、画面に出力します (非常に単純なシナリオでは、入力バッファーは 10 と想定されます)。
複数の引数を渡すと、動作しています..つまり、異なるファイルの内容をプログラムどおりに1つずつ表示しています..
-- ポイントは、次のようなシェルでコマンドを実行するときです。
./mycat abc.txt > テスト
wheremycat
は私のプログラム名で、abc.txt
は必要なファイルで、新しいファイル テストにリダイレクトしています。私が理解できない奇妙な部分は、リダイレクト後にファイルテストを調べると、ファイルからのデータがabc.txt
最初に表示され、次にprintfsとデータを表示する代わりにcプログラムのprintf関数が表示されることです。これの理由は何ですか?
int main(int argc,char *argv[])
{
char buf[10];
int x,read_bytes,i,fd;
read_bytes=1;
char read_buf[1024*1024];
for(i=0;i<argc;i++)
printf("you entered %s\n",argv[i]); //this printf
switch(argc)
{
case 1:
x=read(0,buf,sizeof(buf));
write(1,buf,x);
break;
default:
for(i=1;i<argc;i++)
{
printf("showing the %dth file\n\n",i);
fd=open(argv[i], O_RDONLY);
if(fd==-1)
{
perror("no file opened for such name");
exit(1);
}
while(read_bytes!=0)
{
read_bytes=read(fd,read_buf,sizeof(read_buf));
if(read_bytes==-1)
{
perror("not able to read\n");
exit(2);
}
write(1,read_buf,read_bytes);
}
read_bytes=1;
close(fd);
}
break;
}
return 0;
}