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