|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Kostik Belousov 2:5020/400 20 Dec 2005 13:28:38 To : Valentin Nechayev Subject : Re: mgetty: чудны дела твои... --------------------------------------------------------------------------------
netch@segfault.kiev.ua (Valentin Nechayev) writes:
> >>> Dennis Chikin wrote:
>
> DC> fd = open(devname, O_RDWR | O_NDELAY | O_NOCTTY );
>
> 6.0-release.
> Прицепил в ttys скрипт:
>
> #!/bin/sh
> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
> ( date; fstat -p $$ ) >>/tmp/ttyd0.dbg
> exec ktrace -f /tmp/ttyd0.tr -a /usr/local/sbin/mgetty
>
> Смотрю в /tmp/ttyd0.dbg:
>
> Mon Dec 19 13:02:37 EET 2005
> USER CMD PID FD MOUNT INUM MODE SZ|DV R/W
> root sh 62011 root / 2 drwxr-xr-x 512 r
> root sh 62011 wd / 2 drwxr-xr-x 512 r
> root sh 62011 text / 141 -r-xr-xr-x 113940 r
> root sh 62011 10 /usr/local 144349 -rwxr-xr-x 205 r
>
> Вывод: при запуске из init'а не открыт ни один дескриптор. (10-й в
> sh - это исполняемый тут скрипт /usr/local/sbin/ttyd0)
>
> Смотрю что делает mgetty:
>
> 61915 mgetty CALL open(0x2807ac39,0,0)
> 61915 mgetty NAMI "/var/run/ld-elf.so.hints"
> 61915 mgetty RET open 1
>
> Это первый сработавший open(). Hулевой дескриптор свободен.
> Hо возвращается 1. Хм...
>
> Через некоторое количество открытий/закрытий файлов приходим вот сюда:
>
> 61915 mgetty CALL open(0xbfbfea80,0x8006,0)
> 61915 mgetty NAMI "/dev/ttyd0"
> 61915 mgetty RET open 1
> 61915 mgetty CALL fcntl(0x1,0x4,0x2)
> 61915 mgetty RET fcntl 0
> 61915 mgetty CALL close(0)
> 61915 mgetty RET close -1 errno 9 Bad file descriptor
> 61915 mgetty CALL dup(0x1)
> 61915 mgetty RET dup 2
>
> То есть в данном случае дескриптор 0 в какой-то странной позе - не
> занят, но и не свободен? По ману open() не обязан возвращать
> минимальный дескриптор из свободных, но по Posix - обязан.
>
> Проверяю на обычной программе. Повторить не получается.
>
> 62261 t CALL close(0)
> 62261 t RET close 0
> 62261 t CALL dup(0x2)
> 62261 t RET dup 0
>
> это "обычная программа" (в которой только close() и dup())
>
> Хм, пока объяснения нет...
>
>
> -netch-
По горячим следам - я изготовил патч и послал followup на PR/87208.
Просьба протестировать на живых машинах (я проверял в qemu).
kostikbel@gmail.com
--- ifmail v.2.15dev5.3
* Origin: The excellent-installed InterNetNews site (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/287563919ca4b.html, оценка из 5, голосов 10
|