我正在阅读Android 4.0的ADB源代码。我现在正在阅读的文件是system / core / adb / sysdeps.h。有一件事我无法理解:
static __inline__ int adb_write(int fd, const void* buf, size_t len)
{
return write(fd, buf, len);
}
#undef write
#define write ___xxx_write
最后一行是什么意思?什么是“___ xxx_write”?
答案 0 :(得分:0)
他们包装了POSIX write()
API调用,然后将write
重新定义为未定义的符号,因此无法在程序中使用它。他们想确保开发人员改用adb_write()
。
如果使用的C库已经定义了#undef write
宏,则#define write
确保随后的write
不会收到“重新定义”警告。
6年前,adb_write()
只不过是Unix上的write()
。最近,错误代码被包装以进行特殊处理,从而证明了此技术的价值。
static __inline__ int adb_write(borrowed_fd fd, const void* buf, size_t len) {
return TEMP_FAILURE_RETRY(write(fd.get(), buf, len));
}
#undef write
#define write ___xxx_write