我已经在 C 中使用系统调用(打开、读取和写入)来模拟 Linux 系统中的“cat”函数,它比真实的要慢...
我使用与真正的“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,我认为这里不需要代码),而不是使用该文件描述符调用 catPrint() 函数,输出描述符为 1,因此它打印到标准输出。
我不明白为什么它会变慢,因为我使用相同的文件进行测试,并且两者(真正的“猫”和我的)只有一个 read() 和一个 write() 用于整个文本。整个文本不应该只出现在屏幕上吗?
PS:我已将此标记为作业,尽管我在这里的问题(为什么它变慢)不是作业的一部分。我只需要使用系统调用创建一个“cat”类型的函数,就完成了。我只是对我的代码有点慢很感兴趣。
用我的愚蠢解决的问题:
我刚决定在同一个文件上调用 linux 的原始 cat 几次,一个接一个,我只是意识到它在我调用它的某些时候也很慢,就像我的一样慢自己的。我想一切都比...
很抱歉像这些人一样浪费你的时间。