Сегодня я столкнулся с каким-то странно выглядящим кодом, который на первый взгляд мне не совсем понятен, что он делает.
send(file_desc,"Input \'y\' to continue.\t",0x18,0);
read(file_desc,buffer,100);
iVar1 = strcmp("y",(char *)buffer);
if (iVar1 == 0) {
// some more code
}
Кажется, что текстовая строка записывается в дескриптор файла. Сразу же после этого он читает из этого файлового дескриптора в буфер. И он сравнивает, если текст, записанный в буфер, является "y"
.
Насколько я понимаю (пожалуйста, исправьте меня, если я ошибаюсь), что он записывает некоторые данные, которые являются текстовой строкой, в дескриптор файла, и затем файловый дескриптор действует как временное хранилище для всего, что вы пишете в него. И после этого он читает эти данные из файлового дескриптора в буфер. На самом деле это тот же дескриптор файла . Это выглядит как примитивный способ использования файлового дескриптора для копирования данных из текстовой строки в буфер. Почему бы просто не использовать strcpy()
вместо этого?
Каков будет сценарий записи в файловый дескриптор, а затем сразу же прочитать его? Это кажется сложным способом копирования данных с использованием файловых дескрипторов. Или, может быть, я недостаточно хорошо понимаю этот код, что делает эта последовательность send()
и read()
?
И при условии, что этот код вместо этого использует дескриптор файла для копирования текстовой строки "Input \'y\' to continue.\t"
в буфер, почему они сравнивают его со строкой "y"
? Вероятно, оно должно быть ложным каждый раз.
Я предполагаю, что любые данные, записанные в файловый дескриптор, остаются в этом файловом дескрипторе до тех пор, пока не будут прочитаны. Таким образом, здесь кажется, что send()
используется для записи строки, а read()
используется для ее считывания.
В man send
он говорит:
The only difference between send() and write(2) is the presence of flags. With a zero
flags argument, send() is equivalent to write(2).
почему они используют send()
вместо write()
? Этот код просто ошеломляет.
Редактировать: вот полная функция, откуда этот код изначально:
void send_read(int file_desc)
{
int are_equal;
undefined2 buffer [8];
char local_28 [32];
/* 0x6e == 110 == 'n' */
buffer[0] = 0x6e;
send(file_desc,"Input \'y\' to continue.\t",0x18,0);
read(file_desc,buffer,100);
are_equal = strcmp("y",(char *)buffer);
if (are_equal == 0) {
FUN_00400a86(file_desc,local_28);
}
else {
close(file_desc);
}
return;
}