2017-04-11 2 views
2

위해 나는 것 다음 Golang 코드는 무기한액세스 FD (3) 별표 EAGI

eagi := os.NewFile(uintptr(3), "/dev/stdeagi") 
data := bufio.NewReaderSize(eagi, 64*1024) 
... 
data.WriteTo(conn) // Blocks indefinitely! 
심지어 오류 던져하지 않는 것

차단되어야한다 - 나의 추측이다, 내가 접근하고있어 FD가 잘못되었습니다. 제 목적은 Asterisk EAGI에 대한 프로세스 'FD 3에 액세스하는 것입니다. 나는 또한 대체 경로 fmt.Sprintf("/proc/%d/fd/3", os.Getpid())을 읽으려고했지만, 이것은 같은 방식으로 행동하는 것으로 보인다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

당신은 파일 기술자가 3인가 확실합니까? 파일을 열어 보셨습니까? – JimB

+0

@JimB Docker 컨테이너 안에'ls/proc//fd'을 실행하면'3'이 보입니다. 'cat '하려고 할 때'Permission Denied'가 나타납니다 – Angad

+0

@Flimzy 저는 https://golang.org/pkg/os/#pkg-variables를 영감으로 사용했습니다. Go가 사용하는 것 같습니다. – Angad

답변

1

올바른 방법은 syscall.Read(fd int, buf []byte) (n int, err error) (doc)입니다. 내 문제에 관해서는, Asterisk 콘솔에서, sip show channelstats에 대한 전화는 내가 RTP 패킷을 전혀받지 못했다는 것을 보여 주었고, 실제로 읽을 것이 없었기 때문에 Read가 블로킹하고 있었다. 내 네트워킹 설정이 필요했습니다.