2

我正在阅读 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”?

4

1 回答 1

0

他们正在包装 POSIX write()API 调用,然后重新定义write为未定义的符号,因此它不能在程序中使用。他们希望确保开发人员adb_write()改为使用。

如果使用的 C 库已经定义了宏,#undef write则确保后续#define write不会收到“重新定义”警告。write

6年前,adb_write()无非是write()在Unix上。最近,错误代码被包装以进行特殊处理,这证明了这种技术的价值。

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

来自https://android.googlesource.com/platform/system/core/+/e7f014da9c49c56367ae2dc3ba53c5dda3814c45/adb/sysdeps.h#499

于 2020-07-01T09:57:22.353 回答