1-е чтение-запись отличается от 2-го пачкой ioctl-ей. Вероятно в них дело.
write(1, «Sending 'Hello?\\r\\n'\n», 21) = 21
write(3, «Hello?\r\n», 8) = 8
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
fstat(4, {st_dev=makedev(0, 10), st_ino=32, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=1000, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 29), st_atime=2013/08/19-15:00:48, st_mtime=2013/08/19-15:00:48, st_ctime=2013/08/19-15:00:48}) = 0
readlink("/proc/self/fd/4", "/dev/pts/29", 4095) = 11
stat("/dev/pts/29", {st_dev=makedev(0, 10), st_ino=32, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=1000, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 29), st_atime=2013/08/19-15:00:48, st_mtime=2013/08/19-15:00:48, st_ctime=2013/08/19-15:00:48}) = 0
open("/dev/pts/29", O_RDWR|O_NOCTTY|O_NONBLOCK) = 5
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(5, SNDCTL_TMR_START or TCSETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
select(6, [5], [], [], {1, 0}) = 1 (in [5], left {0, 999996})
read(5, «Hello?\n\n», 100) = 8
select(6, [5], [], [], {1, 0}) = 0 (Timeout)
write(1, "\n", 1) = 1
write(1, «Got: 'Hello?\\n\\n'\n», 18) = 18
write(1, "\n", 1) = 1
write(1, «Sending 'Hello?\\r\\n'\n», 21) = 21
write(3, «Hello?\r\n», 8) = 8
select(6, [5], [], [], {1, 0}) = 1 (in [5], left {0, 999996})
read(5, «Hello?\r\n», 100) = 8
select(6, [5], [], [], {1, 0}) = 0 (Timeout)
write(1, "\n", 1) = 1
write(1, «Got: 'Hello?\\r\\n'\n», 18) = 18
P.S. лог получен командой strace