ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7
@ 2013-11-23 19:14 pedz (Perry Smith)
  2013-11-23 20:59 ` [ruby-core:58539] " Perry Smith
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: pedz (Perry Smith) @ 2013-11-23 19:14 UTC (permalink / raw
  To: ruby-core


Issue #9144 has been reported by pedz (Perry Smith).

----------------------------------------
Bug #9144: ptys on AIX version 4 through 7
https://bugs.ruby-lang.org/issues/9144

Author: pedz (Perry Smith)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [powerpc-aix6.1.0.0]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


The best way to open a pty on AIX version 4 through 7 is using what they call "AT&T" mode.  The steps are to first open "/dev/ptc" which opens the master side.  Then to a ttyname on the file descriptor and open the string that is returned to open the slave side.

cat q.c
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
  int master = open("/dev/ptc", O_RDWR);
  char *slave_name = ttyname(master);
  int slave = open(slave_name, O_RDWR);
  int n;
  char buf[128];

  printf("slave name is %s\n", slave_name);
  printf("master fd is %d, slave fd is %d\n", master, slave);
  write(master, "blah\n", 5);
  n = read(slave, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  write(slave, "foodog\n", 7);
  n = read(master, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  return 0;
}

make q
cc     q.c   -o q

./q
slave name is /dev/pts/9
master fd is 3, slave fd is 5
n = 5
blah
n = 14
blah
foodog

(Note that ECHO is set on the tty which is why we see 'blah' when the slave is read.)

You can also use what the ruby code calls BSD 4.2 ptys.  On my build that I did as simply as possible, I'm not sure which code I got but it is not working.  I have several versions of Ruby and all fail with "can't get Master/Slave device (RuntimeError)"  While "BSD" mode is supported and works, the "AT&T" mode is much nicer.

For AIX version 3, there was a similar approach but instead of /dev/ptc, the master was called /dev/ptm.  

The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't recognize those names.

There is no need to push any streams modules, etc.  Everything is autopushed.  You might want to add in a grantpt but I'm still not clear when and if that is needed.



-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:58539] Re: [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7
  2013-11-23 19:14 [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 pedz (Perry Smith)
@ 2013-11-23 20:59 ` Perry Smith
  2015-02-28 14:59 ` [ruby-core:68349] [Ruby trunk - Bug #9144] " nagachika00
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Perry Smith @ 2013-11-23 20:59 UTC (permalink / raw
  To: Ruby developers

[-- Attachment #1: Type: text/plain, Size: 2790 bytes --]

Doing more research, the existing ruby code is 99% there.

I got it to work by changing line 248 of ext/pty/pty.c from:

#if defined(I_PUSH) && !defined(__linux__)

to

#if defined(I_PUSH) && !defined(__linux__) && !defined(_AIX)

AIX has autopush which is really what the second half of the && should be testing.

Perry

On Nov 23, 2013, at 1:14 PM, pedz (Perry Smith) <pedz@easesoftware.com> wrote:

> 
> Issue #9144 has been reported by pedz (Perry Smith).
> 
> ----------------------------------------
> Bug #9144: ptys on AIX version 4 through 7
> https://bugs.ruby-lang.org/issues/9144
> 
> Author: pedz (Perry Smith)
> Status: Open
> Priority: Normal
> Assignee: 
> Category: 
> Target version: 
> ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [powerpc-aix6.1.0.0]
> Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
> 
> 
> The best way to open a pty on AIX version 4 through 7 is using what they call "AT&T" mode.  The steps are to first open "/dev/ptc" which opens the master side.  Then to a ttyname on the file descriptor and open the string that is returned to open the slave side.
> 
> cat q.c
> #include <stdio.h>
> #include <fcntl.h>
> 
> int main(int argc, char *argv[])
> {
>  int master = open("/dev/ptc", O_RDWR);
>  char *slave_name = ttyname(master);
>  int slave = open(slave_name, O_RDWR);
>  int n;
>  char buf[128];
> 
>  printf("slave name is %s\n", slave_name);
>  printf("master fd is %d, slave fd is %d\n", master, slave);
>  write(master, "blah\n", 5);
>  n = read(slave, buf, sizeof(buf));
>  printf("n = %d\n", n);
>  printf("%*.*s", n, n, buf);
>  write(slave, "foodog\n", 7);
>  n = read(master, buf, sizeof(buf));
>  printf("n = %d\n", n);
>  printf("%*.*s", n, n, buf);
>  return 0;
> }
> 
> make q
> cc     q.c   -o q
> 
> ./q
> slave name is /dev/pts/9
> master fd is 3, slave fd is 5
> n = 5
> blah
> n = 14
> blah
> foodog
> 
> (Note that ECHO is set on the tty which is why we see 'blah' when the slave is read.)
> 
> You can also use what the ruby code calls BSD 4.2 ptys.  On my build that I did as simply as possible, I'm not sure which code I got but it is not working.  I have several versions of Ruby and all fail with "can't get Master/Slave device (RuntimeError)"  While "BSD" mode is supported and works, the "AT&T" mode is much nicer.
> 
> For AIX version 3, there was a similar approach but instead of /dev/ptc, the master was called /dev/ptm.  
> 
> The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't recognize those names.
> 
> There is no need to push any streams modules, etc.  Everything is autopushed.  You might want to add in a grantpt but I'm still not clear when and if that is needed.
> 
> 
> 
> -- 
> http://bugs.ruby-lang.org/


[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:68349] [Ruby trunk - Bug #9144] ptys on AIX version 4 through 7
  2013-11-23 19:14 [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 pedz (Perry Smith)
  2013-11-23 20:59 ` [ruby-core:58539] " Perry Smith
@ 2015-02-28 14:59 ` nagachika00
  2015-05-20 16:33 ` [ruby-core:69254] " nagachika00
  2015-05-21  0:47 ` [ruby-core:69258] " usa
  3 siblings, 0 replies; 5+ messages in thread
From: nagachika00 @ 2015-02-28 14:59 UTC (permalink / raw
  To: ruby-core

Issue #9144 has been updated by Tomoyuki Chikanaga.

Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED

----------------------------------------
Bug #9144: ptys on AIX version 4 through 7
https://bugs.ruby-lang.org/issues/9144#change-51694

* Author: Perry Smith
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [powerpc-aix6.1.0.0]
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED
----------------------------------------
The best way to open a pty on AIX version 4 through 7 is using what they call "AT&T" mode.  The steps are to first open "/dev/ptc" which opens the master side.  Then to a ttyname on the file descriptor and open the string that is returned to open the slave side.

cat q.c
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
  int master = open("/dev/ptc", O_RDWR);
  char *slave_name = ttyname(master);
  int slave = open(slave_name, O_RDWR);
  int n;
  char buf[128];

  printf("slave name is %s\n", slave_name);
  printf("master fd is %d, slave fd is %d\n", master, slave);
  write(master, "blah\n", 5);
  n = read(slave, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  write(slave, "foodog\n", 7);
  n = read(master, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  return 0;
}

make q
cc     q.c   -o q

./q
slave name is /dev/pts/9
master fd is 3, slave fd is 5
n = 5
blah
n = 14
blah
foodog

(Note that ECHO is set on the tty which is why we see 'blah' when the slave is read.)

You can also use what the ruby code calls BSD 4.2 ptys.  On my build that I did as simply as possible, I'm not sure which code I got but it is not working.  I have several versions of Ruby and all fail with "can't get Master/Slave device (RuntimeError)"  While "BSD" mode is supported and works, the "AT&T" mode is much nicer.

For AIX version 3, there was a similar approach but instead of /dev/ptc, the master was called /dev/ptm.  

The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't recognize those names.

There is no need to push any streams modules, etc.  Everything is autopushed.  You might want to add in a grantpt but I'm still not clear when and if that is needed.


---Files--------------------------------
signature.asc (508 Bytes)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:69254] [Ruby trunk - Bug #9144] ptys on AIX version 4 through 7
  2013-11-23 19:14 [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 pedz (Perry Smith)
  2013-11-23 20:59 ` [ruby-core:58539] " Perry Smith
  2015-02-28 14:59 ` [ruby-core:68349] [Ruby trunk - Bug #9144] " nagachika00
@ 2015-05-20 16:33 ` nagachika00
  2015-05-21  0:47 ` [ruby-core:69258] " usa
  3 siblings, 0 replies; 5+ messages in thread
From: nagachika00 @ 2015-05-20 16:33 UTC (permalink / raw
  To: ruby-core

Issue #9144 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE

Backported into `ruby_2_2` branch at r50564.

----------------------------------------
Bug #9144: ptys on AIX version 4 through 7
https://bugs.ruby-lang.org/issues/9144#change-52508

* Author: Perry Smith
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [powerpc-aix6.1.0.0]
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE
----------------------------------------
The best way to open a pty on AIX version 4 through 7 is using what they call "AT&T" mode.  The steps are to first open "/dev/ptc" which opens the master side.  Then to a ttyname on the file descriptor and open the string that is returned to open the slave side.

cat q.c
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
  int master = open("/dev/ptc", O_RDWR);
  char *slave_name = ttyname(master);
  int slave = open(slave_name, O_RDWR);
  int n;
  char buf[128];

  printf("slave name is %s\n", slave_name);
  printf("master fd is %d, slave fd is %d\n", master, slave);
  write(master, "blah\n", 5);
  n = read(slave, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  write(slave, "foodog\n", 7);
  n = read(master, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  return 0;
}

make q
cc     q.c   -o q

./q
slave name is /dev/pts/9
master fd is 3, slave fd is 5
n = 5
blah
n = 14
blah
foodog

(Note that ECHO is set on the tty which is why we see 'blah' when the slave is read.)

You can also use what the ruby code calls BSD 4.2 ptys.  On my build that I did as simply as possible, I'm not sure which code I got but it is not working.  I have several versions of Ruby and all fail with "can't get Master/Slave device (RuntimeError)"  While "BSD" mode is supported and works, the "AT&T" mode is much nicer.

For AIX version 3, there was a similar approach but instead of /dev/ptc, the master was called /dev/ptm.  

The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't recognize those names.

There is no need to push any streams modules, etc.  Everything is autopushed.  You might want to add in a grantpt but I'm still not clear when and if that is needed.


---Files--------------------------------
signature.asc (508 Bytes)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-core:69258] [Ruby trunk - Bug #9144] ptys on AIX version 4 through 7
  2013-11-23 19:14 [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 pedz (Perry Smith)
                   ` (2 preceding siblings ...)
  2015-05-20 16:33 ` [ruby-core:69254] " nagachika00
@ 2015-05-21  0:47 ` usa
  3 siblings, 0 replies; 5+ messages in thread
From: usa @ 2015-05-21  0:47 UTC (permalink / raw
  To: ruby-core

Issue #9144 has been updated by Usaku NAKAMURA.

Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE to 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE

ruby_2_1 r50570 merged revision(s) 49776.

----------------------------------------
Bug #9144: ptys on AIX version 4 through 7
https://bugs.ruby-lang.org/issues/9144#change-52512

* Author: Perry Smith
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [powerpc-aix6.1.0.0]
* Backport: 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE
----------------------------------------
The best way to open a pty on AIX version 4 through 7 is using what they call "AT&T" mode.  The steps are to first open "/dev/ptc" which opens the master side.  Then to a ttyname on the file descriptor and open the string that is returned to open the slave side.

cat q.c
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
  int master = open("/dev/ptc", O_RDWR);
  char *slave_name = ttyname(master);
  int slave = open(slave_name, O_RDWR);
  int n;
  char buf[128];

  printf("slave name is %s\n", slave_name);
  printf("master fd is %d, slave fd is %d\n", master, slave);
  write(master, "blah\n", 5);
  n = read(slave, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  write(slave, "foodog\n", 7);
  n = read(master, buf, sizeof(buf));
  printf("n = %d\n", n);
  printf("%*.*s", n, n, buf);
  return 0;
}

make q
cc     q.c   -o q

./q
slave name is /dev/pts/9
master fd is 3, slave fd is 5
n = 5
blah
n = 14
blah
foodog

(Note that ECHO is set on the tty which is why we see 'blah' when the slave is read.)

You can also use what the ruby code calls BSD 4.2 ptys.  On my build that I did as simply as possible, I'm not sure which code I got but it is not working.  I have several versions of Ruby and all fail with "can't get Master/Slave device (RuntimeError)"  While "BSD" mode is supported and works, the "AT&T" mode is much nicer.

For AIX version 3, there was a similar approach but instead of /dev/ptc, the master was called /dev/ptm.  

The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't recognize those names.

There is no need to push any streams modules, etc.  Everything is autopushed.  You might want to add in a grantpt but I'm still not clear when and if that is needed.


---Files--------------------------------
signature.asc (508 Bytes)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-05-21  0:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-23 19:14 [ruby-core:58538] [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 pedz (Perry Smith)
2013-11-23 20:59 ` [ruby-core:58539] " Perry Smith
2015-02-28 14:59 ` [ruby-core:68349] [Ruby trunk - Bug #9144] " nagachika00
2015-05-20 16:33 ` [ruby-core:69254] " nagachika00
2015-05-21  0:47 ` [ruby-core:69258] " usa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).