本文整理汇总了Golang中github.com/flynn/flynn/Godeps/_workspace/src/github.com/docker/docker/pkg/term.SetWinsize函数的典型用法代码示例。如果您正苦于以下问题:Golang SetWinsize函数的具体用法?Golang SetWinsize怎么用?Golang SetWinsize使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SetWinsize函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ResizeTTY
func (l *LibvirtLXCBackend) ResizeTTY(id string, height, width uint16) error {
container, err := l.getContainer(id)
if err != nil {
return err
}
if !container.job.Config.TTY {
return errors.New("job doesn't have a TTY")
}
pty, err := container.GetPtyMaster()
if err != nil {
return err
}
return term.SetWinsize(pty.Fd(), &term.Winsize{Height: height, Width: width})
}
开发者ID:technosophos,项目名称:flynn,代码行数:14,代码来源:libvirt_lxc_backend.go
示例2: Attach
func (l *LibvirtLXCBackend) Attach(req *AttachRequest) (err error) {
client, err := l.getContainer(req.Job.Job.ID)
if err != nil && (req.Job.Job.Config.TTY || req.Stdin != nil) {
return err
}
defer func() {
if client != nil && (req.Job.Job.Config.TTY || req.Stream) && err == io.EOF {
<-client.done
job := l.state.GetJob(req.Job.Job.ID)
if job.Status == host.StatusDone || job.Status == host.StatusCrashed {
err = ExitError(job.ExitStatus)
return
}
err = errors.New(*job.Error)
}
}()
if req.Job.Job.Config.TTY {
pty, err := client.GetPtyMaster()
if err != nil {
return err
}
if err := term.SetWinsize(pty.Fd(), &term.Winsize{Height: req.Height, Width: req.Width}); err != nil {
return err
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
if req.Stdin != nil && req.Stdout != nil {
go io.Copy(pty, req.Stdin)
} else if req.Stdin != nil {
io.Copy(pty, req.Stdin)
}
if req.Stdout != nil {
io.Copy(req.Stdout, pty)
}
pty.Close()
return io.EOF
}
if req.Stdin != nil {
stdinPipe, err := client.GetStdin()
if err != nil {
return err
}
go func() {
io.Copy(stdinPipe, req.Stdin)
stdinPipe.Close()
}()
}
if req.Job.Job.Config.DisableLog {
stdout, stderr, initLog, err := client.GetStreams()
if err != nil {
return err
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
var wg sync.WaitGroup
cp := func(w io.Writer, r io.Reader) {
if w == nil {
w = ioutil.Discard
}
wg.Add(1)
go func() {
io.Copy(w, r)
wg.Done()
}()
}
cp(req.InitLog, initLog)
cp(req.Stdout, stdout)
cp(req.Stderr, stderr)
wg.Wait()
return io.EOF
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
lines := -1
if !req.Logs {
lines = 0
}
log := l.openLog(req.Job.Job.ID)
ch := make(chan logbuf.Data)
done := make(chan struct{})
go log.Read(lines, req.Stream, ch, done)
defer close(done)
for data := range ch {
var w io.Writer
switch data.Stream {
case 1:
w = req.Stdout
case 2:
w = req.Stderr
case 3:
//.........这里部分代码省略.........
开发者ID:technosophos,项目名称:flynn,代码行数:101,代码来源:libvirt_lxc_backend.go
示例3: Attach
func (l *LibvirtLXCBackend) Attach(req *AttachRequest) (err error) {
var client *libvirtContainer
if req.Stdin != nil || req.Job.Job.Config.TTY {
client, err = l.getContainer(req.Job.Job.ID)
if err != nil {
return err
}
}
defer func() {
if req.Job.Job.Config.TTY || req.Stream && err == io.EOF {
<-client.done
job := l.state.GetJob(req.Job.Job.ID)
if job.Status == host.StatusDone || job.Status == host.StatusCrashed {
err = ExitError(job.ExitStatus)
}
}
}()
if req.Job.Job.Config.TTY {
pty, err := client.GetPtyMaster()
if err != nil {
return err
}
if err := term.SetWinsize(pty.Fd(), &term.Winsize{Height: req.Height, Width: req.Width}); err != nil {
return err
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
if req.Stdin != nil && req.Stdout != nil {
go io.Copy(pty, req.Stdin)
} else if req.Stdin != nil {
io.Copy(pty, req.Stdin)
}
if req.Stdout != nil {
io.Copy(req.Stdout, pty)
}
pty.Close()
return io.EOF
}
if req.Stdin != nil {
stdinPipe, err := client.GetStdin()
if err != nil {
return err
}
go func() {
io.Copy(stdinPipe, req.Stdin)
stdinPipe.Close()
}()
}
log := l.openLog(req.Job.Job.ID)
r := log.NewReader()
defer r.Close()
if !req.Logs {
if err := r.SeekToEnd(); err != nil {
return err
}
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
for {
data, err := r.ReadData(req.Stream)
if err != nil {
return err
}
switch data.Stream {
case 1:
if req.Stdout == nil {
continue
}
if _, err := req.Stdout.Write([]byte(data.Message)); err != nil {
return err
}
case 2:
if req.Stderr == nil {
continue
}
if _, err := req.Stderr.Write([]byte(data.Message)); err != nil {
return err
}
}
}
}
开发者ID:nightscape,项目名称:flynn,代码行数:88,代码来源:libvirt_lxc_backend.go
示例4: Attach
func (l *LibvirtLXCBackend) Attach(req *AttachRequest) (err error) {
client, err := l.getContainer(req.Job.Job.ID)
if err != nil {
if req.Job.Job.Config.TTY || req.Stdin != nil {
return host.ErrJobNotRunning
}
// if the container has exited and logging was disabled, return EOF
if req.Job.Job.Config.DisableLog {
if req.Attached != nil {
req.Attached <- struct{}{}
}
return io.EOF
}
}
defer func() {
if client != nil && (req.Job.Job.Config.TTY || req.Stream) && err == io.EOF {
<-client.done
job := l.state.GetJob(req.Job.Job.ID)
if job.Status == host.StatusDone || job.Status == host.StatusCrashed {
err = ExitError(*job.ExitStatus)
return
}
err = errors.New(*job.Error)
}
}()
if req.Job.Job.Config.TTY {
pty, err := client.GetPtyMaster()
if err != nil {
return err
}
if err := term.SetWinsize(pty.Fd(), &term.Winsize{Height: req.Height, Width: req.Width}); err != nil {
return err
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
if req.Stdin != nil && req.Stdout != nil {
go io.Copy(pty, req.Stdin)
} else if req.Stdin != nil {
io.Copy(pty, req.Stdin)
}
if req.Stdout != nil {
io.Copy(req.Stdout, pty)
}
pty.Close()
return io.EOF
}
if req.Stdin != nil {
stdinPipe, err := client.GetStdin()
if err != nil {
return err
}
go func() {
io.Copy(stdinPipe, req.Stdin)
stdinPipe.Close()
}()
}
if req.Job.Job.Config.DisableLog {
stdout, stderr, initLog, err := client.GetStreams()
if err != nil {
return err
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
var wg sync.WaitGroup
cp := func(w io.Writer, r io.Reader) {
if w == nil {
w = ioutil.Discard
}
wg.Add(1)
go func() {
io.Copy(w, r)
wg.Done()
}()
}
cp(req.InitLog, initLog)
cp(req.Stdout, stdout)
cp(req.Stderr, stderr)
wg.Wait()
return io.EOF
}
if req.Attached != nil {
req.Attached <- struct{}{}
}
ch := make(chan *rfc5424.Message)
stream, err := l.mux.StreamLog(req.Job.Job.Metadata["flynn-controller.app"], req.Job.Job.ID, req.Logs, req.Stream, ch)
if err != nil {
return err
}
defer stream.Close()
for msg := range ch {
var w io.Writer
//.........这里部分代码省略.........
开发者ID:eldarion-gondor,项目名称:cli,代码行数:101,代码来源:libvirt_lxc_backend.go
注:本文中的github.com/flynn/flynn/Godeps/_workspace/src/github.com/docker/docker/pkg/term.SetWinsize函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论