從man page of writev
:
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
也就是說,第二個參數是大小的數值數組第三個參數(您的案例中的2
)struct iovec
類型的元素。
當strace
打印那些它八進制恰好逸出的不可打印字符顯示,但所有其它的,因爲它們可以被打印。因此,@
只是對應於@
的字節,K
是對應於K
等的字節。
回答您的評論的問題,再看看man page顯示
struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes to transfer */
};
這意味着{"@\10\335 \320\2w\4\240K\252\0\7", 13}
是應該被理解成iov_len = 13
和iov_base
是包含打印爲@\10\335 \320\2w\4\240K\252\0\7
字節的存儲區。火起來gdb
如果你想看到的二進制值:
[[email protected] 1]$ gdb -q
(gdb) p/x "@\10\335 \320\2w\4\240K\252\0\7"
$1 = {0x40, 0x8, 0xdd, 0x20, 0xd0, 0x2, 0x77, 0x4, 0xa0, 0x4b, 0xaa, 0x0, 0x7, 0x0}
其中最後0x0
是字符串的空終止,應該被忽略。
「@」是「@」。 「2w」是兩個字節「\ 2w」的一部分。 「240K」是兩個字節「\ 240K」的一部分。 – 2014-10-28 18:14:19
@ IgnacioVazquez-Abrams,所以它只是一個直接的ASCII轉換? – ryeager 2014-10-28 18:19:58
對於可打印的ASCII部分,當然。 – 2014-10-28 18:21:53