All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ed Schouten <ed@FreeBSD.org>
To: linux-kernel@vger.kernel.org
Subject: Inconsistency between PTY read() return values
Date: Wed, 8 Apr 2009 16:36:31 +0200	[thread overview]
Message-ID: <20090408143631.GH32098@hoeg.nl> (raw)

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

Hi all,

Some time ago I noticed this small inconsistency between the return
values of read() calls on pseudo-terminal master devices while working
on the FreeBSD TTY code.

Consider the following example:

| #include <fcntl.h>
| #include <stdio.h>
| #include <stdlib.h>
| #include <unistd.h>
| 
| int
| main(int argc, char *argv[])
| {
| 	int f1, f2;
| 	char buf[20];
| 	ssize_t r;
| 
| 	f1 = posix_openpt(O_RDWR|O_NOCTTY);
| 	grantpt(f1);
| 	unlockpt(f1);
| 
| 	f2 = open(ptsname(f1), O_RDWR);
| 	close(f2);
| 
| 	r = read(f1, buf, sizeof buf);
| 	printf("%zd\n", r);
| 	if (r == -1)
| 		perror("read");
| 
| 	return (0);
| }

The code is very simple. It acquires a pseudo-terminal, opens the slave
device and closes it. After that it tries to perform a read() on the
pseudo-terminal master device. On at least Solaris 7 to 10, Mac OS X
10.5 and FreeBSD 6 to HEAD, this code just prints 0. On Linux
(at least 2.6.22-2.6.28) I see the following:

	-1
	read: Input/output error

I looked through the standards and it seems the POSIX onlinepubs don't
mention the behaviour of pseudo-terminal master file descriptors at all.
This means it would even be valid of we return 0x1337 or something.

But still, I think it's a little inconsistent. Most programmers would
expect pseudo-terminal master file descriptors to behave somewhat
similar to TTYs, even though they don't need to be. When you try to
perform a read() on the TTY after the master file descriptor gets
closed, you get an end-of-file. You only get an EIO when trying to write
to this descriptor.

Would it be hard to change the Linux TTY code to behave the same?

-- 
 Ed Schouten <ed@FreeBSD.org>

[-- Attachment #2: Type: application/pgp-signature, Size: 195 bytes --]

             reply	other threads:[~2009-04-08 14:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-08 14:36 Ed Schouten [this message]
2009-04-08 16:47 ` Inconsistency between PTY read() return values Alan Cox
2009-04-08 17:56   ` Ed Schouten
2009-04-08 18:09     ` Alan Cox
2009-04-08 18:22       ` Ed Schouten

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090408143631.GH32098@hoeg.nl \
    --to=ed@freebsd.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.