c - 写入文件描述符并立即从中读取
问题描述
今天我遇到了一些看起来很奇怪的代码,乍一看我并不清楚它的作用。
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"
.
我的理解(如果我错了,请纠正我)是它将一些作为文本字符串的数据写入文件描述符,然后文件描述符充当您写入它的任何内容的临时存储位置。之后,它将文件描述符中的数据读取到缓冲区中。它实际上是同一个文件描述符。这似乎是使用文件描述符将数据从文本字符串复制到缓冲区的原始方式。为什么不直接使用 astrcpy()
呢?
写入文件描述符然后立即从中读取的用例是什么?使用文件描述符复制数据似乎是一种复杂的方式。或者也许我对这段代码的理解不够好,这个 asend()
和 a 的序列是做什么的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;
}
解决方案
推荐阅读
- sql-server - 无法在 Raspbian 10(Buster)上为 SQL Server 获取 ODBC 驱动程序 17
- c++ - 断点不会命中 CLion
- php - Codeigniter:如何在重定向中传递搜索词
- wordpress - 是否有任何用于问题和多个答案的插件或页面构建器(用于手动输入)
- c++ - C++ Stream 类打开文件失败
- python-3.x - 在单个文档中翻译多种语言的问题
- java - 如何将日期从 (ddmmyyyy HH:mm:ss) 转换为 (yyyy-MM-dd HH:mm:ss.SSS)?)
- excel - 计算每小时奖金
- excel - 如何复制超出范围的数据
- jquery - Chartjs 多个条形图,第一个数据会偏移过视图