2010-12-16 5 views
1

私は、複数の入力ファイルをコマンドラインで1つの出力ファイルにコピーするために、C(Linux)でAPI呼び出しを使用しているときに問題を抱えています。私は答えをインターネットで検索しましたが、解決するものはありません。 私のプログラムでは、複数の入力ファイルと1つの出力ファイルをコマンドラインで指定することができます。たとえば:C:複数のファイルを1つにコピーする

./archiver file1.txt file2 file3 file4 outputfile 

私はargc/argvを使用して、これらのパラメータをお読みください。何らかの理由でls -lを入力した場合、./archiveroutputfileは同じバイト数を持ちます。つまり、入力ファイルが出力ファイルにコピーされていないことを意味します(cat outputfileの場合、これらのファイルが表示されます)

入力ファイルの内容が出力ファイルにありません。

私は何をするべきかわからないそれらの束の後に私を助けてくれるかもしれません。私はmalloc()などで読んでみましたが、それを実装する方法がわからない、

ご協力いただきありがとうございます。

file_desc_in = open(argv[i],O_RDONLY,0);  
//NEED a loop to copy multiple files in... 
while (!eof) { 
    bytes_read = read(file_desc_in, &buffer, sizeof(buffersize)); 

    if (bytes_read > 1) 
     bytes_written = write(file_desc_out, &i, bytes_read); 
    else { 
     eof=1; 
    } 

私はエラーを含んでいませんが、私はそれらを持っています。すぐに返信いただきありがとうございます。

+3

いくつかのコードを投稿してください。そうでなければ、何が間違っているかを知ることは不可能です。 –

+0

申し訳ありません十分ですか? – donok

+2

私はこれが宿題の割り当てだと思っています。もしそうなら、そのようにタグ付けするべきです。あなたの質問は非常に不明です - 私はあなたが不満を持っていると思います。あなたの任務はすでに遅れているかもしれませんが、私たちが助けを知るように明確にしてください。いくつかのファイルを連結しようとしているのですか?それとも後で簡単に元のファイルに戻すことができるように保存しようとしていますか? – nategoose

答えて

1

あなたのコードを確認するのに役立ちます。ここには行くべきことはたくさんありませんが、私は野生の推測をするつもりです。私はあなたがargv[0](あなたのプログラム)で指定されたファイルをコピーしていて、残りのファイルを取得していないと思われます。私はあなたが与えたもので何とかすることはできないと思います。

+0

あなたは私が何度も何かを使っているので、私は二重チェックをする権利があるかもしれないと思います。ありがとう – donok

1

API呼び出しのみを使用しているとします。どんなAPIについて話していますか? POSIX API?標準CファイルI/O API?

入力ファイルを組み合わせているだけの場合は、Cプログラムを作成する必要はありません。 Linuxを実行しているので、シェルコマンドcat input1 input2 input3 > outputを試してみてください。

これを実行するにはCプログラムを書く必要がある場合は、簡単に開始してください。実際にファイルI/Oを実行する前に、入力引数を正しく解釈できることを確認してください。あなたのプログラムは、単にコマンドライン入力を読み込み、このようなものをプリントアウトしておいてください。

Input files: file1.txt file2.txt file2.txt 
Output files: outputfile.txt 

こうすることで、あなたは、ファイルI/Oの心配を開始する前に、CLIの構文解析コードが正しく動作することを確認することができます。一度に1つずつデバッグする方がはるかに簡単です。

+0

申し訳ありませんが私の頭の中でPOSIX APIを意味していたことは明らかでしたが、私は言及することを忘れています。 – donok

1

外部ループは各ファイル名を開き、ループの最後にそれを閉じる必要があります。すべての入力ファイルを読み終えたら、最後に出力ファイルを閉じます。

またopenreadwritefopenfreadfwriteの違いを学ぶ必要があります。

関連する問題