- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个与 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
最佳答案
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 = 13
和 iov_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/
我知道strace用途 ptrace做这份工作, 但它需要使用 TRACE_ME 运行目标进程在, 这不适用于已经运行的进程的情况。 它如何在已经运行的进程上工作? 最佳答案 strace -p -
精确是我在这里关注的重点...... mmap(0x37aa74d000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRI
我正在尝试调试 Gammu,一个“移动电话的库和命令行实用程序”,它在与调制解调器正常通信时“超时”。 gammu recognize -> 在指定的超时时间内没有响应。可能是手机未连接。 查看它产生
当我跑 strace -f strace /bin/ls 知道 strace 是如何工作的,它失败了 ptrace(PTRACE_TRACEME, 0, 0, 0) = -1 EPERM (Opera
[root@woyo test]# strace -o /tmp/lsof.strace -p 5625 Process 5625 attached - interrupt to quit q 有谁知
我想用strace跟踪系统调用。读写太多,因此我想将它们排除在外。 这是我的测试: strace -e trace=!read ls 我的电脑(ubuntu 14)无法运行此命令。错误消息是“!ope
我正在研究这个问题并决定自己实现该程序。 Interpreting STRACE output - pipes and forks strace 输出对我来说是不同的: execve("./fork"
我正在尝试调试 ngspice 的原因在运行模拟时将烦人的换行符打印到 stderr。我试图在可追溯到 1993 年的 2400 个源文件之一中找到它,但这并不像听起来那么容易!然而,这确实意味着我有
strace 密码: getcwd("/root"..., 4096) = 6 ltrace 密码: getcwd(NULL, 0)
open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib/libselinux.so.1", O_RDONLY) = 3 open("/lib/l
我有一个单线程的 unix 进程,它通过 tcp 与其他进程进行通信。 问题如下。 当我启动进程时,它会挂起(没有忙循环),直到我杀死它。 有趣的是,一旦我将 strace 附加到它,它就会继续以预期
我正在使用 strace 来查找程序中可能存在的错误,并且我有以下输出: open(0x7765533c, O_RDONLY) = -1 EACCES (Permission denied) 如何获取
我的 strace 给我这个输出 fcntl64(3, 0xe /* F_??? */, 0xff963a24) = 0 我希望看到类似的东西,在那里我可以看到 readalbe 内容而不是地址...
我有一个启动 libmicrohttpd 网络服务器(它管理自己的线程)的程序,然后在主线程中调用“暂停”,这样整个程序就不会退出。 我正在尝试对这个程序进行 strace,但是一旦我进入“暂停”调用
我想在后台运行 strace。例如,我在跑 strace -esetsid setsid sleep 123 但我想继续运行其他东西,直到 setsid 返回。显然,只需将 & 附加到 sleep 1
我有一个作为守护进程运行的 perl 脚本。它每 10 秒访问一次数据库,如果队列中有任何作业,它会生成一个单独的 shell 来执行单个作业。但脚本经常无法从数据库获取作业。 理想情况下应该像这
我知道它使用 ptrace 来实现, 它可以在寄存器中获取参数, 但他们只是数字, strace如何将它们转换成文字信息? 它只是针对每个系统调用的硬编码吗? 最佳答案 基本上,是的,它是硬编码的。如
我正在编写一个 python 程序,通过使用 ctypes 的挂载系统调用来挂载 fuse 文件系统。现在它在挂载系统调用中给出无效参数错误。我检查了所有的论点,它们似乎是正确的。我听 friend
尝试调试不返回 bash 提示符的程序,我使用了 strace并给它 PID。该程序是一个二进制文件,我没有源代码。根据strace , 有一个 -1 EBADF (Bad file descript
我正在尝试调试应用程序的启动。我想使用 strace 来跟踪应用程序在启动期间执行的系统调用,但是一旦应用程序启动,我不希望 strace 但是很难追踪到应用程序的启动。 有没有办法捕获应用程序启动的
我是一名优秀的程序员,十分优秀!