上記のシステムコールを使用して、あるファイルから別のファイルに 512 バイトをコピーするプログラムを作成しようとしています (いくつかのバッファー、memcpy()、次に fwrite() を作成できますが、Unix 固有の低レベル I/ O)。コードの冒頭は次のとおりです。
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int src, dest, bytes_read;
char tmp_buf[512];
if (argc < 3)
printf("Needs 2 arguments.");
printf("And this message I for some reason don't see.... o_O");
if ((src = open(argv[1], O_RDWR, 0)) == -1 || (dest = open(argv[2], O_CREAT, 0)) == -1)
perror("Error");
while ((bytes_read = read(src, tmp_buf, 512)) != -1)
write(dest, tmp_buf, 512);
return 0;
}
読み取ったファイルのサイズが 512 の倍数にならないという事実に対処していないことはわかっています。しかし、最初に私は本当に2つのことを理解する必要があります:
メッセージが表示されないのはなぜですか? セグメンテーション フォールトも発生しないので、プログラムから Cc で抜ける必要があります。
これらの低レベル関数はどのように機能しますか? たとえば、FILE *file を fwrite で使用している場合、*file は自動的にインクリメントされますが、ファイル ポインタを手動でインクリメントする必要がありますか? もしそうなら、open() などがファイル ID だけではなく、ファイル ポインタを指定しないと仮定すると、どのようにアクセスするのでしょうか?
どんな助けでも素晴らしいでしょう。お願いします。ありがとうございました!