?

Log in

No account? Create an account

А вот что такое ШОК - Оживший юзерпик

Feb. 7th, 2006

03:00 pm - А вот что такое ШОК

Previous Entry Share Next Entry

http://avnik.livejournal.com/29887.html

Комментарий из определения FILE в stdio.h:

   char	_file;		/* should be short */


Слов нет, одни эмоции.

Current Mood: охренеть

Comments:

[User Picture]
From:fearan
Date:February 7th, 2006 12:25 pm (UTC)
(Link)
Бесподобно!

Отчасти они, вобщем-то, правы - зачем процессу больше 252 fd? Если так дофига файлов открыть надо - значит, софтина кривая, давно пора хранилище в БД перенесть.

А всякую почту держать на солярисе - моветон :-)
(Reply) (Thread)
[User Picture]
From:tobotras
Date:February 7th, 2006 04:56 pm (UTC)
(Link)
Ну, процесс может быть сервером и хавать много сокетов...
(Reply) (Parent) (Thread)
From:(Anonymous)
Date:February 7th, 2006 07:14 pm (UTC)
(Link)
сервера на stdio никто в здравом уме не пишет // maxcom
(Reply) (Parent) (Thread)
[User Picture]
From:fearan
Date:February 8th, 2006 09:23 am (UTC)
(Link)
А что, моя дурак, и сокеты AF_INET тоже через fd работают?
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:February 8th, 2006 10:03 am (UTC)
(Link)
Не хотелось бы тебя расстраивать... :)
(Reply) (Parent) (Thread)
[User Picture]
From:fearan
Date:February 8th, 2006 10:43 am (UTC)
(Link)
Дык этта... Сокет-то получается другого типа, нежели файл, да? Тип-то по-другому описан?

Впрочем, я в сях - как свинья в апельсинах :-)
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:February 8th, 2006 11:26 am (UTC)
(Link)
Ну, глубоко в дебрях ядра он слегка другого типа, да. Но для пользовательского процесса интерфейс к нему тот же -- число-файлдескриптор.

(Как в сях, так и в других языках, это свойство Юникса.)
(Reply) (Parent) (Thread)
[User Picture]
From:gt
Date:February 7th, 2006 12:29 pm (UTC)
(Link)
Для меня большим шоком было то, что проблема с длинным путем в locate/find до сих пор не решена (с 1994 года никто практически не трогал код).
(Reply) (Thread)
[User Picture]
From:tobotras
Date:February 7th, 2006 12:34 pm (UTC)
(Link)
А в чем она заключается? В ограниченном и фиксированном размере буфера под командную строчку exec'а?
(Reply) (Parent) (Thread)
[User Picture]
From:gt
Date:February 7th, 2006 12:58 pm (UTC)

Если бы!

(Link)
http://archive.linuxfromscratch.org/lfs-museum/4.1/LFS-BOOK-4.1-HTML/chapter06/findutils.html

There is a bug in locate.c of Findutils that causes a segmentation fault to occur on very long path names. The problem is caused by the get_short() function calculating negative numbers incorrectly. This patch corrects this bug.

Как оказалось и в этот, и в другие разы, патчи проблему не лечат. До сих пор неизвестно, где ошибка.
(Reply) (Parent) (Thread)
[User Picture]
From:poige
Date:February 11th, 2006 07:46 am (UTC)

А чего -- критично?

(Link)
Финансируйте. ;-)
(Reply) (Parent) (Thread)
[User Picture]
From:msh
Date:February 7th, 2006 03:05 pm (UTC)
(Link)
Меня в свое время убила имплементация STDIO в одной из версий libc для макинтоша. там был FILE files[256], хэндлер был индексом там, а open - wrapper-ом поверх fopen
(Reply) (Thread)
[User Picture]
From:avk
Date:February 7th, 2006 04:01 pm (UTC)
(Link)
ой.
(Reply) (Thread)
[User Picture]
From:avk
Date:February 7th, 2006 04:06 pm (UTC)
(Link)
это в каком солярисе?
unsigned char _file; /* UNIX System file descriptor */
в stdio_impl.h в 5.7..
(Reply) (Thread)
[User Picture]
From:tobotras
Date:February 7th, 2006 04:09 pm (UTC)
(Link)
Я поглядел в исходниках opensolaris.

Один черт, больше 255 не лезет :)
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:February 7th, 2006 04:43 pm (UTC)
(Link)
это известная штука, и этому комментарию в stdio.h не меньше 20 лет. более того, этот char обычно трактуется как signed, и дескрипторов тогда вообще не больше 128.

можно в принципе написать свой fopen(), который будет отдавать заранее зарезервированный дескриптор вместо полученного >256. понятно, что если одновременно используется больше 256 дескрипторов, то после каждого такого fopen() придётся делать fclose().

иначе -- только open()
(Reply) (Thread)
[User Picture]
From:tobotras
Date:February 7th, 2006 04:54 pm (UTC)
(Link)
Дык, что делать и кто виноват, понятно. Надо ж было допереть :)

Вообще -- не понимаю, на кой черт столько лет тащить за собой явный баг :(
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:February 7th, 2006 05:20 pm (UTC)
(Link)
это называется brain damage.
ну точно:
/* @(#) stdio.h 1.2 86/10/07 SMI; from UCB 1.4 06/30/83 */

# ifndef FILE
#define BUFSIZ  1024
#define _SBFSIZ 8
extern struct _iobuf {
       int    _cnt;
       unsigned char *_ptr;
       unsigned char *_base;
       int    _bufsiz;
       short  _flag;
       char   _file;          /* should be short */
} _iob[];

что-то мне говорит, что оно из seventh edition идёт.)
(Reply) (Parent) (Thread)