gpt4 book ai didi

c - Linux 中的 strace 和 writev() 函数,数据中的 '@' 、 '2w' 和 '240K' 代表什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:26 25 4
gpt4 key购买 nike

我有一个与 USB 交互的程序,我想知道以下写入命令告诉我什么。我知道 writev iovec 结构由数据数组指针和长度组成,但是 "@\10\335\320\2w\4\240K\252\0\7" 是什么意思数据数组表示?我特别想知道 @ 符号、2w 和 240K 是什么意思,因为它们不是我期望的十六进制数据值。

我在 Linux 上运行,这里是 writev 行:

writev(6, [{"@\10\335 \320\2w\4\240K\252\0\7", 13}, {"\0\0\0\4\0\0\0\4", 8}], 2) = 21

最佳答案

来自man page of writev :

ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

也就是说,第二个参数是一个数组,其大小为 struct iovec 类型的第三个参数(在您的情况下为 2)元素的值。

strace 打印那些时,它 octal 会转义不可打印的字符,但会完全按照可打印的方式显示所有其他字符。因此,@就是@对应的字节,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 = 13iov_base 是包含打印为 @\10\335\320\2w\4\240K\252\0\7 的字节的内存区域。如果您想查看二进制值,请启动 gdb:

[mihai@winterfell 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 是字符串的空终止符,应该被忽略。

关于c - Linux 中的 strace 和 writev() 函数,数据中的 '@' 、 '2w' 和 '240K' 代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com