行走的小布鞋 发表于 2015-02-27 10:40

在分析strace输出的时候,发现有很多系统调用,其中有函数read

大家好,小弟请教一个问题

在分析strace输出的时候,发现有很多系统调用,其中有函数read
read(4, "\v", 1)                  = 1
read(4, "\n", 1)                  = 1
read(4, "\f", 1)                  = 1

这个函数传递的参数不一样,v,n,f
第一和第三个参数的含义,我都明白,但是第二个参数啥意思,搞不懂,请大侠指点下。

我百度read,但是没有任何结果。

或者哪位大侠告诉我哪里可以查到linux所有系统函数的文档

我的linux系统是centos 6.3

Tinnal 发表于 2015-02-28 00:21

回复 1# 行走的小布鞋


第二个参数就是读出来的内容罗。你不是要每次读一个字节吗。

因为是字符串,strace帮你把内容给打印出来了。

行走的小布鞋 发表于 2015-02-28 10:09

读出来的字符串,怎么可能都是\n,\f之类的呢?回复 2# Tinnal


   

Tinnal 发表于 2015-02-28 22:01

回复 3# 行走的小布鞋


    这是转义字符。/n代表回车 /f是换页。
请看http://baike.baidu.com/link?url=2MB9jz1OHVaCCrr0mOGi8VO4XDQUM-WEPdsWQE1OjrgFMZJDkLHl3NhXEYywQHtblNm402Fa_Ltzm4_H9bqEwK

爻易 发表于 2015-03-01 09:12

root#echo 中国 > 测试
root#strace cat 测试
...
read(3, "\344\270\255\345\233\275\n", 32768) = 7
write(1, "\344\270\255\345\233\275\n", 7中国
) = 7
...

行走的小布鞋 发表于 2015-03-03 14:43

谢谢亲 回复 2# Tinnal


   

shihyu 发表于 2015-03-07 02:37

本帖最后由 shihyu 于 2015-03-07 02:38 编辑


我也想问类似问题

strace echo "Hello"2>&1 | grep -E 'read|write'
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\37\2\0\0\0\0\0"..., 832) = 832
write(1, "Hello\n", 6Hello

请问一下"read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\37\2\0\0\0\0\0"..., 832) = 832" 这行是代表什么?

谢谢

nswcfd 发表于 2015-03-12 12:16

就算echo "hello"内部简单到只有一句write(1, "hello", 6),任何elf文件的执行在进入main之前有一大段初始化工作,
这个read工作在fd=3上,你可以看看最近的一个open=3是打开哪个文件。

我试了一下
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\355\241\245:\0\0\0"..., 832) = 832
页: [1]
查看完整版本: 在分析strace输出的时候,发现有很多系统调用,其中有函数read