2017-04-11 7 views
2

のために、私は無期限アクセスFD(3)アスタリスクのEagI

eagi := os.NewFile(uintptr(3), "/dev/stdeagi") 
data := bufio.NewReaderSize(eagi, 64*1024) 
... 
data.WriteTo(conn) // Blocks indefinitely! 

それも、エラーをスローしていないようブロックしているように見える次Golangコード持っている - 私の推測ではあるが、私がアクセスしていますFDが間違っています。私の目的は、Asterisk EAGIのプロセス 'FD3にアクセスすることです。私はまた、代替パスfmt.Sprintf("/proc/%d/fd/3", os.Getpid())を読むことを試みましたが、これは同じように動作するようです。私は間違って何をしていますか?

+0

あなたはファイルディスクリプタ3を持っていることは確かか?ファイルを開こうとしましたか?私は私のドッカーコンテナ内で 'lsのは/ proc//fd'を行うと – JimB

+0

@JimB、私は '3'を参照してください。私はそれをcat' 'にしようとすると、私は'許可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)です。私の問題に関しては、アスタリスクのコンソールの中から、sip show channelstatsへの呼び出しは、私がRTPパケットを全く受け取っていないこと、そして本当に読むことがなかったので、読み取りがブロックされていることを示しました。私のネットワーク設定が必要でした。

関連する問題