Я сделал эту функцию в 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 () для всего текста. Разве весь текст не должен появляться на экране?
П.С .: Я отметил это как домашнее задание, хотя мой вопрос здесь (почему он медленнее) не является частью домашнего задания. Мне нужно было использовать системные вызовы только для создания функции типа «кошка», что и делается. Я просто заинтригован моим кодом, который немного медленнее.
ПРОБЛЕМА, РЕШЕННАЯ ГЛУПОСТЬЮ ОТ МЕНЯ:
Я просто решил вызывать оригинальную кошку linux несколько раз для одного и того же файла, один за другим, и я просто понял, что в некоторых случаях я вызывал его медленно, так же медленно, как и мой. Я думаю, все хорошо, чем ...
Извините, что потратил ваше время, как эти люди.