[今天,我遇到了一些看起来很奇怪的代码,乍一看,它对我来说并不明显。
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;
}