2013-10-30 7 views
0

내 프로그램에서 리눅스에서 strace을 실행하려고했습니다. 나는 두 개의 라인에 약간의 오차가 얻을 왜strace 출력 문제 해결

brk(0)         = 0x804b000 
brk(0x806c000)       = 0x806c000 
open("test.txt", O_RDONLY)    = 3 
fstat64(3, {st_mode=S_IFREG|0600, st_size=216, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7728000 
read(3, "10\n10\n2\t3\t3\t5\t4\t7\t7\t2\t2\t7\t\n8\t3\t1"..., 4096) = 216 
read(3, "", 4096)      = 0 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0xb7728000, 4096)    = 0 
**open(NULL, O_RDONLY)     = -1 EFAULT (Bad address)** 
dup(2)         = 3 
fcntl64(3, F_GETFL)      = 0x2 (flags O_RDWR) 
fstat64(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7728000 
**_llseek(3, 0, 0xbfc97a44, SEEK_CUR)  = -1 ESPIPE (Illegal seek)** 
write(3, "Can't open file!: Bad address\n", 30Can't open file!: Bad address 

: 여기

은 예제 출력입니다. 무엇 **open(NULL, O_RDONLY)** 그것은 무엇을 의미합니까?

+0

RTFM :'man 2 open' =) –

+0

이름이 NULL 인 파일을 여는 중입니다. 적어도 변수를 포함하는 파일 이름은 NULL입니다. –

답변

3
**open(NULL, O_RDONLY) 

파일 이름으로 NULL 문자열을 전달합니다. documentation에 따르면 pathname이 액세스 가능 주소 공간 외부를 가리키면 EFAULT이 생성됩니다.

_llseek(3, 0, 0xbfc97a44, SEEK_CUR) 

이 기능을 지원하지 않는 파일 설명자의 오프셋을 설정하려고합니다. 사실, 표준 오류 (3은 dup (2)의 결과 임)의 오프셋을 이동하려고합니다. 실제 파일이 아니기 때문에 의미가 없습니다. documentation에 따르면 파일 설명자가 파이프, 소켓 또는 FIFO와 연관 될 때 ESPIPE이 생성됩니다.