From: Perry Smith Date: 2013-11-23T14:59:27-06:00 Subject: [ruby-core:58539] Re: [ruby-trunk - Bug #9144][Open] ptys on AIX version 4 through 7 --Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 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) = wrote: >=20 > Issue #9144 has been reported by pedz (Perry Smith). >=20 > ---------------------------------------- > Bug #9144: ptys on AIX version 4 through 7 > https://bugs.ruby-lang.org/issues/9144 >=20 > Author: pedz (Perry Smith) > Status: Open > Priority: Normal > Assignee:=20 > Category:=20 > Target version:=20 > 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 >=20 >=20 > 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. >=20 > cat q.c > #include > #include >=20 > int main(int argc, char *argv[]) > { > int master =3D open("/dev/ptc", O_RDWR); > char *slave_name =3D ttyname(master); > int slave =3D open(slave_name, O_RDWR); > int n; > char buf[128]; >=20 > 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 =3D read(slave, buf, sizeof(buf)); > printf("n =3D %d\n", n); > printf("%*.*s", n, n, buf); > write(slave, "foodog\n", 7); > n =3D read(master, buf, sizeof(buf)); > printf("n =3D %d\n", n); > printf("%*.*s", n, n, buf); > return 0; > } >=20 > make q > cc q.c -o q >=20 > ./q > slave name is /dev/pts/9 > master fd is 3, slave fd is 5 > n =3D 5 > blah > n =3D 14 > blah > foodog >=20 > (Note that ECHO is set on the tty which is why we see 'blah' when the = slave is read.) >=20 > 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. >=20 > For AIX version 3, there was a similar approach but instead of = /dev/ptc, the master was called /dev/ptm. =20 >=20 > The _IBMESA code in ext/pty/pty.c (which mentions AIX) I don't = recognize those names. >=20 > 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. >=20 >=20 >=20 > --=20 > http://bugs.ruby-lang.org/ --Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - http://gpgtools.org iQEcBAEBAgAGBQJSkRcvAAoJEIPoMwNgGirlajsH/2rVCQ8YXu9K+1eDGcJARWYE BAH9X+kuqovzq/EEss6hsruErAdFQTqt7RQAgyxAmq2FgBm2e/CMVSETHRjgagMh TYl7KVkJOMt5l1GE8T1k7usAqyxkrWWQ5SlCQ3OTvTwEcQcjj5hi9Qur8nEhh1CV /MPQDkI+VHqecKC9qOpG9IY860BBQM/2Rx+LjCeAwxOC2FyuggrI2NbtljyaAyZk wSaGcoc1KTMEDHL/AdI6ZyA0ThlUEOOzvzJpo+SDPvRpC+OLwz4SP2LXlnoVCwJq AzceqYZ+GaCOgCSBlu3OkWYSFMa/UqSZe9LWpTJDEiV95XFC93Ve0J6aTLazMOQ= =2qDL -----END PGP SIGNATURE----- --Apple-Mail=_BE3C6EFB-D185-4C61-995A-D840D221B209--