Linuxシステムで「cat」関数をシミュレートするためにシステムコール(open、read、write)を使用してCでこの関数を実行しましたが、実際の関数よりも低速です...
実際の「cat」と同じバッファサイズを使用しており、「strace」を使用しているので、同じ量のシステムコールが実行されていると思います。しかし、私の「猫」からの出力は、実際の「猫」よりも少し遅いです。
これは私が持っているコードです:
#define BUFSIZ 32768
int sysWriteBuffer(int fdout, char *buffer, ssize_t readBytes) {
ssize_t writtenBytes = 0;
while(writtenBytes < readBytes) {
writtenBytes += write(fdout,
buffer + writtenBytes, readBytes - writtenBytes);
if(writtenBytes == -1) {
return -1;
}
}
return 0;
}
int catPrint(int fdin, int fdout) {
char buffer[BUFSIZ];
ssize_t readBytes;
do {
readBytes = read(fdin, buffer, BUFSIZ);
if(readBytes == -1) {
return -1;
}
if(sysWriteBuffer(fdout, buffer, readBytes) == -1) {
return -1;
}
} while(readBytes > 0);
return 0;
}
私はファイルから読み取っています(mainに引数として渡します。ここではコードは必要ないと思います)。そのファイル記述子と出力記述子に1を指定してcatPrint()関数を呼び出し、stdoutに出力します。
テストに同じファイルを使用していて、両方(実際の「猫」と私のもの)では、テキスト全体に対して1つのread()と1つのwrite()しかないため、なぜ遅くなるのかわかりません。テキスト全体を画面に表示するだけではいけませんか?
PS:ここでの私の質問(なぜ遅いのか)は宿題の一部ではありませんが、これを宿題としてタグ付けしました。システムコールを使用して「cat」タイプの関数を作成するだけで済みました。少し遅いコードに興味があります。
私からの愚かさで解決した問題:
同じファイルでLinuxの元の猫を次々と呼び出すことにしましたが、呼び出すときも同じくらい遅いことに気づきました。自分の。私はすべてがより良いと思います...
この人のように時間を無駄にしてすみません。