Я сделал эту функцию в C, используя системные вызовы (открытые, прочитанные и записываемые), чтобы имитировать функцию "cat" в системах Linux, и она медленнее, чем реальная...
Я использую тот же размер буфера, что и реальный "кот" , и используя "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() для всего текста. Должен ли весь текст просто отображаться на экране?
P.S: Я отметил это как домашнюю работу, хотя мой вопрос здесь (почему он медленнее) не является частью домашней работы. Мне нужно было использовать системные вызовы для создания функции типа "cat", которая выполняется. Я просто заинтригован своим кодом, который немного медленнее.
ПРОБЛЕМА, РЕШЕННАЯ С ЧРЕЗВЫЧАЙНОСТЬЮ ИЗ МЕНЯ:
Я просто решил вызвать linux original cat несколько раз в один и тот же файл, один за другим, и я просто понял, что он был медленным в то время, как я его называл, так же медленно, как и мой собственный. Я думаю, все хорошо, чем...
Извините за то, что тратил свое время, как на этих людей.