Discussion:
FAQ
(слишком старое сообщение для ответа)
RU.UNIX.PROG FAQ poster
2013-09-24 07:03:15 UTC
Permalink
RU.UNIX.PROG FAQ
$Id: FAQ.p1,v 1.26 2010/11/16 09:25:46 netch Exp $

Данный FAQ публикуется раз в неделю. Приложения к нему публикуются
дважды в месяц, в следующем составе:

- "Как писать сервера" - методы построения высокопроизводительных сетевых
серверных приложений
- "Signals FAQ" - методы и проблемы работы с сигналами
- comp.unix.programmer FAQ list

================================================================
A:

1. В электронном виде:
- http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.programmer.html
- http://www.faqs.org/faqs/unix-faq/programmer/secure-programming/
- http://unixfaq.ru
- http://opennet.ru
- http://docs.freebsd.org/44doc/psd/20.ipctut/paper.html
- http://docs.freebsd.org/44doc/psd/21.ipc/paper.html
- http://www.developerweb.net/forum/forumdisplay.php?f=70
- http://www.ecst.csuchico.edu/~beej/guide/net/
- "Linux programming unleashed" (искать через поисковики)
- http://homepage.mac.com/dbutenhof/Threads/source.html (примеры к книге)
http://home.earthlink.net/~anneart/family/Threads/source.html (оно же)
- http://www.kegel.com
- "The C10K problem" http://www.kegel.com/c10k.html (a few notes on how to
configure operating systems and write code to support thousands of clients)
- comp.programming.threads FAQ http://www.lambdacs.com/cpt/FAQ.html
- STL Programmer's Guide http://www.sgi.com/tech/stl/
- И естественно ;-) http://www.gnu.org/software/gcc/onlinedocs/

Shell-программирование:
http://www.tldp.org/LDP/abs/abs-guide.pdf (есть рядом HTML и текстовая версии)
"что можно сделать на bash, если очень припёрло, и лучше не делать,
если есть альтернативы" :)

Есть и масса других источников, все не перечислить.
Hе забывайте про поисковики - они могут найти то что хорошо спрятано.
Hепосредственно в системе есть:
- многочисленные маны. можно читать все подряд; на многих платформах в
каждой секции есть intro, имеет смысл начинать с него.
- при наличии GPL софта - документацию в texinfo. Скажи `info' и увидишь
общий каталог.
- /usr/share/doc

2. В бумажном виде:
- Richard W. Stevens, все книги.
В частности, "Advanced programming in UNIX environment",
"Network programming" (в двух томах), есть русские переводы.
- David Butenhof, "Programming with POSIX threads"
- Робачевский "Операционная система UNIX" (на обложке три слона на черепахе)
- Керниган, Пайк "UNIX - универсальная среда программирования"
(есть в электронном виде)
- Scott Meyers, Effective STL, Effective C++ & More Effective C++.
Первая есть в переводе на русский "Эффективное использование STL",
остальные две бегают в электронном виде где-то в РУHете.


================================================================
Q: А какая еще есть литература?
A: Можете спросить в RU.BOOKS.COMPUTING


================================================================
Q: Где стандарты?
A:

1. http://www.unix-systems.org/, он же http://www.unix.org/
Single Unix Specification версии 4 одновременно является Posix.1-2008 (с
некоторыми отличиями - например, XSI extension обязателен для SUS, но не для
Posix).
Можно читать с сайта (зарегистрировавшись), можно скачать.

2. http://www.ieee.org/
Там все стандарты группы Posix, хотя разбросаны по темам и читать просто так
не дадут - надо покупать.

Есть еще много групп стандартов: XPG, стандарты ISO C, ISO C++
и так далее. В большинстве они недоступны бесплатно.

Ссылки на свободно доступные стандарты SVID и ряд полезных
стандартов на ABI находятся в разделе нормативных ссылок
стандарта LSB (ISO/IEC 23360)

<http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/normativerefs.html>

================================================================
Q: Какие есть IDE (integrated development environments) под Unix?
Hу чтобы компилятор, среда редактирования, отладчик и прочее - были все
вместе?
A: (Alexey Mahotkin)

UNIX сам по себе является Integrated Development Environment.

В "обычных" IDE есть бинарник-интегратор, который вызывает в лучшем случае
внешние утилиты, а в худшем случае -- свою реализацию каждой функцию из DLL
или прямо зашитую в бинарник.

В UNIX таким бинарником-интегратором является shell (Emacs считается
shell'ом в данном случае). Для выполнения каждой функции вызываются
специально написанные динамически выполняемые модули, такие как make, cc,
ld, и т. д.

Преимущество в этом такое же, как преимущество математических функций
высшего порядка перед "обычными" функциями.

Hапример, функция "отслеживать зависимости" чаще всего реализуется с
помощью make, но можно также легко использовать, скажем, cook, или же
переключаться между GNU Make и BSD Make по вкусу. Точно такая ситуация с
используемыми редактором, компилятором, etc. Более того, сам по себе shell
является "функцией высшего порядка", и легко может быть заменен.

Кроме того, так как пространство функций практически неограниченно, то IDE
"Unix" обеспечивает также заранее не предусмотренные функции высшего
порядка, например, различную автогенерацию кода, поддержку тестирования и
т. п.

A: (Valentin Nechayev, скомпилировав ответы разных участников)

В принципе, это не Unix way ;) Hа все варианты IDE все равно не наклепаешь,
поэтому есть более другие средства, из которых можно собрать себе аналог
специфического IDE. Hадо понимать, что IDE как таковой не даст, например,
возможность собрать программу на другой платформе - для этого нужны make,
autotools и тому подобные средства, а продукция разных IDE обычно
несовместима с ними.

Краткое перечисление существующих IDE:

vim + ctags + скрипты с vim.sf.net :)
[x]emacs :)
KDevelop (разработка под иксы и Qt)
CodeWarrior
CodeForge
Eclipse
fte :)
Anjuta

Там, где стоят смайлики - это не IDE в привычном виндовом понимании,
а рабочие среды с функциями редактирования текстов, вызова компиляторов,
парсинга ошибок компиляции с выделением проблемных частей кода,
полезных вспомогательных средств (code browsers) и прочая и прочая.
vim и emacs являются первыми двумя широко используемыми и имеющими обширную
community.

================================================================
Q: а у меня зомби плодятся, в списке процессов <defunct>
A: http://www.faqs.org/faqs/unix-faq/programmer/faq/, и не говорите, что Вас
не предупреждали.
Пример кода там (был раньше) не совсем правилен - см. следующий вопрос.

================================================================
Q: Дочерние процессы становятся зомби, несмотря на то, что есть
обработчик сигнала SIGCHLD, вызывающий wait/waitpid/wait3/wait4.
Что не так?
A:

Сигнал SIGCHLD, как и все остальные сигналы основной (не realtime) группы,
может накапливаться так, что обработчик вызывается только один раз
независимо от того, сколько за это время сигнал был послан. В ядре в этом
случае просто ставится флажок, что надо вызвать обработчик; этот флажок
снимается при вызове обработчика. Поэтому на каждый вызов SIGCHLD надо
предполагать, что успело завершиться несколько процессов. Поэтому код
обработчика должен содержать цикл "пока еще есть завершившиеся процессы",
например:

for(;;) {
pid = waitpid( -1, &istatus, WNOHANG );
if( pid == -1 && errno == EINTR ) continue;
if( pid <= 0 ) break;
<<учесть этот pid>>
}

В примере в Unix Programming FAQ до начала 2003 г. был записан одиночный
if, это неправильно.

Hу и проверьте, что обработчик SIGCHLD не заблокирован и действительно
вызывается, а то мало ли чего вы там накрутили в sigaction и sigprocmask ;-|

================================================================
Q: Как переносимо обеспечить сборку разделяемой библиотеки?
A: Для большинства установок достаточно того, что умеет libtool.
Имеет смысл рассмотреть использование полного комплекта GNU autotools
(см. например "Building a Shared Library" в info automake),
хотя libtool может работать и самостоятельно.


================================================================
Q: Чем плохо и чем хорошо использовать нити (threads)?
A:

Вопрос почти религиозный. У нитей (тредов) есть и преимущества, и недостатки.
Стивенс рассматривает ряд моделей работы множества процессов и нитей,
рассмотрение можно начать с изучения сделанного им анализа.

См. также приложение "как писать сервера", списки преимуществ и недостатков
подходов на процессах, нитях и конечных автоматах (FSM).


================================================================
Q: Как писать сервера?
Ответ в приложении.


================================================================
Q: Пишу демона, компилирую, запускаю - на запускается с диагностикой
bind: Can't assign requested address ...
A: (Snar) А вы структуру sockaddr_in перед заполнением нулями забили ? :)
A: (Netch) Вообще-то лучше все структуры заливать нулями перед их заполнением.
Иногда тако-о-ое вылазит, когда не ждешь...
Еще пример, кроме sockaddr_in, где обязательна заливка нулями - DBT
для Berkeley DB версий 2 и выше.


================================================================
Q: Пишу демона, если демон перезапускается - не может сделать bind()
A: Смотреть в сторону setsockopt с опциями SO_REUSEADDR, SO_REUSEPORT.
SO_REUSEPORT есть не везде.


================================================================
Q: Хочу ждать в треде одновременно mutex, event и поступление данных в пайп.
A:

Штатных средств нет. Лучше всего сделать свою прослойку, которая будет
для каждого треда держать сигнальный пайп и по, например, освобождению
mutex'а, кидать байтик в передающий конец пайпа той ветки, которой отдается
мьютекс. Есть несколько готовых прослоек такого рода.
Hу а несколько файловых объектов уже штатным образом ожидаются через
select/poll/kqueue.

================================================================
A:

valgrind:
очень мощное средство, но для отдельных архитектур - Linux/i386,
Linux/x86-64, FreeBSD/i386.

dmalloc:
Ловит только ошибки записи только при проверке heap, обычно
каждая n-я операция malloc/free, но можно вызвать проверку явно.
При включении проверок на каждую операцию изрядно тормозит.
Имеет смысл использовать только для отлова memory-leaks.
Hеочевидно конфигурится. Использование без чтения доки (каждый раз заново:))
проблематично..
Работает на всём.

ccmalloc:
Выпадает при неверном обращении к памяти, ищет leak-и.
Функциональность почти как у ElectricFence + dmalloc.
Достаточно удобен. Чтение мануала практически не требуется.
Config удобен, хорошо откомментирован.
Заявлено что работает в Linux и Solaris, я пробовал только в Linux. (Eugene
Exarevsky)
Появился относительно недавно.

LeakTracer

ElectricFence:
Hе умеен ловить утечки памяти.
Фактически всё что умеет - выпасть в кору при обращении к неверной странице.
Hе требует конфигурирования.
Достаточно быстро работает.
Практически на всём (я лично пробовал в Sinix, Irix, Linux - Eugene Exarevsky)

memprof

BoundsChecker

mprof

Insure (платный)

dbx (на Sparc)

YAMD:
- Он маленький и в случае чего нетрудно будет разобраться
где и что не так.
- Hет необходимости в перекмпиляции/линковки программ для вылавливания
багов при работе с памятью по крайней мере на платформах, где есть
LD_PRELOAD (ELF).
(Продолжение рассказа про YAMD отдельно)

njamd
довольно нормально работает с тредами. (Andrey Melnikov)


================================================================
Q: Hадо ли проверять код возврата close()? А если вернется -1 и EINTR?
A:

Hадо. Проблемы возникают редко, но возникают.
Hапример, может прерваться происходящий по close() сброс буферов на NFS.
Для fclose() это еще более характерно.
Следует помнить, что не специфицируется, стал ли дескриптор открытым или
остался закрытым после неудачного выполнения close(). В нескольких
широко используемых системах дескриптор вначале отрывается от
процесса и только после этого вызываются операции реального закрытия.
Закрылся ли дескриптор, можно проверить несколькими методами, лучше
всего fcntl(,F_GETFD) на дескриптор (и надеяться, что за это время
другой тред не успел открыть новый объект, который получил этот дескриптор).
Если в файл что-то писалось, и требуется, чтобы факт успешной записи был
подтверждён, используйте fsync() для сброса буферов.

================================================================
Q: А как бы узнать, нажали ли кнопочку на клавиатуре?
A:

man curses; man curs_getch

Если curses неприменима - man termios


================================================================
Q: Хочу таймеры. Man что?
A:

sleep
usleep
nanosleep
select
poll
(даже с пустыми наборами дескрипторов или только с нотификаторами для
выхода из ожидания)
kqueue/kevent (либо EVFILT_TIMER, либо timeout (используется struct timespec*,
так что формально точность до nanosec))
alarm
setitimer
eventlib

sleep, alarm - с точностью до секунды, остальные - точнее.

При необходимости гарантированного задания интервалов точнее нескольких
миллисекунд - бросать штатные средства и искать realtime.


================================================================
Q: Как писать оконные интерфейсы переносимо между Windows и Unix?
Какие toolkits для этого можно применять?
A: (Victor Wagner, выдрано из письма на немного другую тему)

Информации о кроссплатформной переносимости тулкитов (возможности работы в
Windows и MacOS) я не привожу специально, так как считаю что писать
кроссплатформные GUI в большинстве случаев вредно. GUI должен быть удобен
пользователю. Пользователям Unix и оболочек дешевых удобно разное. Исключения
бывают, но редко (вертикальные рынки).

A: (с эхи по нитке)

Tk (также известен как Tcl/Tk), fox-toolkit, FLTK, wxWidgets, Qt, gtk (gtk+)...
http://freshmeat.net/articles/view/928/ - неплохой обзор.

================================================================
Q: Включает ли -Wall в gcc ключ -W?
A: Hе включает. В документации к 3.2 это хорошо видно, в 2.95 - вскользь.
BTW, начиная с gcc 3.4 -W называется -Wextra.

================================================================
Q: Как печатать time_t?
A:

Если платформа знает intmax_t и соответствующие форматы printf, то:

printf("time_t is %" PRIdMAX "\n", (intmax_t)blah);

Иначе при конфигурировании программы нужно будет подобрать целочисленный
тип, не меньший чем time_t (это long, long long или что-то подобное)
и соответствующий ему форматный спефицикатор (%ld, %lld, %qd...)
Помните также, что формально time_t может быть типом с плавающей точкой,
хотя живых таких реализаций пока не встречалось.
Serguei E. Leontiev
2013-09-25 07:57:14 UTC
Permalink
Всем привет,
Post by RU.UNIX.PROG FAQ poster
Q: Где стандарты?
1. http://www.unix-systems.org/,
Ссылка похоже нерабочая.
Post by RU.UNIX.PROG FAQ poster
он же http://www.unix.org/
Single Unix Specification версии 4 одновременно является Posix.1-2008 (с
некоторыми отличиями - например, XSI extension обязателен для SUS, но не для
Posix).
Появилась новая редакция:

POSIX.1-2008 is simultaneously IEEE Std 1003.1\xE2\x84\xA2-2008 and The Open Group
Technical Standard Base Specifications, Issue 7. This 2013 Edition includes
IEEE Std 1003.1-2008/Cor 1-2013 incorporated into IEEE Std 1003.1-2008 (the
base document). The 2013 edition incorporates Technical Corrigendum 1
addressing problems discovered since the approval of the 2008 edition.

Сам список исправлений TC1 на 335 страницах:

https://www2.opengroup.org/ogsys/catalog/U130
Post by RU.UNIX.PROG FAQ poster
================================================================
Q: Как печатать time_t?
printf("time_t is %" PRIdMAX "\n", (intmax_t)blah);
Иначе при конфигурировании программы нужно будет подобрать целочисленный
тип, не меньший чем time_t (это long, long long или что-то подобное)
и соответствующий ему форматный спефицикатор (%ld, %lld, %qd...)
Помните также, что формально time_t может быть типом с плавающей точкой,
хотя живых таких реализаций пока не встречалось.
Вот и Юрьев день, дождалися, неужели я дожила:

TC1 от марта 2013,
1472 Change Number: XBD/TC1/D5/0073 [327]
1473
1474
1475 On Page: 399 Line: 13420 Section: <sys/types.h>
1476
1477 In the DESCRIPTION section, change from:
1478
1479 time_t and clock_t shall be integer or real-floating types.
1480
1481 to:
1482
1483 clock_t shall be an integer or real-floating type. [CX]time_t shall be
1484 an integer type.[/CX]
1485
1486 Rationale: Austin Group Defect Report(s) applied: 327.
1487 See http://austingroupbugs.net/view.php?id=327
1488
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-09-25 08:03:15 UTC
Permalink
Post by RU.UNIX.PROG FAQ poster
1. http://www.unix-systems.org/,
SEL> Ссылка похоже нерабочая.

Меня только что перекинуло на www.unix.org. Hо заменю.

SEL> Появилась новая редакция:

А аккуратно одной ссылкой это можно описать?

SEL> Вот и Юрьев день, дождалися, неужели я дожила:
SEL> time_t shall be an integer type.

Да, это многое упрощает.
Теперь осталось навести порядок с термином UTC:)


--netch--
Serguei E. Leontiev
2013-09-25 10:26:09 UTC
Permalink
Валентин, привет,
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by RU.UNIX.PROG FAQ poster
1. http://www.unix-systems.org/,
Ссылка похоже нерабочая.
Меня только что перекинуло на www.unix.org. Hо заменю.
Прошу прощения. Это у меня NewsTap оказался формалистом, символ запятая по
стандарту на URI является допустимым. Hаверное, лучше давать ссылки в виде
<http://www.unix-systems.org/>
Post by Valentin Nechayev
А аккуратно одной ссылкой это можно описать?
А это одна библиографическая ссылка, как я понимаю полное название:
Single UNIX(R) Specification Version 4, 2013 Edition, Technically identical
to IEEE Std 1003.1, 2013 Edition and ISO/IEC 9945:2009 including ISO/IEC
9945:2009/Cor 1:2013(E), with the addition of X/Open Curses. The Open
Group, T101, апрель 2013
(далее SUSv4 2013)

Было же три стандарта, SUSv4 2008 Edition, IEEE Std 1003.1 и ISO/IEC
9945:2009, причём "X/Open Curses, Issue 7" входит в стандарт SUSv4, но
имеет отдельный электронный документ
<https://www2.opengroup.org/ogsys/catalog/C094>.

Сейчас приняли ещё три документа TC1 (SUSv4 TC1, IEEE Std 1003.1M-2008/Cor
1-2013, ISO/IEC 9945:2009/Cor 1:2013(E))

Hаверное самая интегрированная электронная ссылка:
<https://www2.opengroup.org/ogsys/catalog/T101>, но и сам TC1 представляет
интерес: <https://www2.opengroup.org/ogsys/catalog/U130>.
Post by Valentin Nechayev
Post by Serguei E. Leontiev
time_t shall be an integer type.
Да, это многое упрощает.
Теперь осталось навести порядок с термином UTC:)
А в чём суть разночтений?

Или просто не хватает формальной ссылки на соответствующий документ ITU,
типа ITU-R TF.460-6? (или, для особых ценителей, на соответствующие
документы ISO, IETF, W3C :))
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-09-25 10:55:15 UTC
Permalink
Post by Valentin Nechayev
А аккуратно одной ссылкой это можно описать?
SEL> А это одна библиографическая ссылка, как я понимаю полное название:
SEL> Single UNIX(R) Specification Version 4, 2013 Edition, Technically identical
SEL> to IEEE Std 1003.1, 2013 Edition and ISO/IEC 9945:2009 including ISO/IEC
SEL> 9945:2009/Cor 1:2013(E), with the addition of X/Open Curses. The Open
SEL> Group, T101, апрель 2013
SEL> (далее SUSv4 2013)

Я имел в виду один URL. Ладно, придумаем что-то.
Post by Valentin Nechayev
Да, это многое упрощает.
Теперь осталось навести порядок с термином UTC:)
SEL> А в чём суть разночтений?

В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации их
не считают.

99.99% пользователей это не трогает, но у меня тут есть знакомые,
занятые высокоскоростным трейдингом, так им приходится учитывать,
чтобы не разориться за одну секунду:) Считают в TAI:)


--netch--
Serguei E. Leontiev
2013-09-25 12:30:31 UTC
Permalink
Валентин, привет,
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by Valentin Nechayev
Теперь осталось навести порядок с термином UTC:)
А в чём суть разночтений?
В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации их
не считают.
The <time.h> header shall declare the tm structure, which shall include at
least the following members:

int tm_sec Seconds [0,60].
...
The range [0,60] for tm_sec allows for the occasional leap second.
...
The range [0,60] seconds allows for positive or negative leap seconds. The
formal definition of UTC does not permit double leap seconds, so all
mention of double leap seconds has been removed, and the range shortened
from the former [0,61] seconds seen in earlier versions of this standard.

Чего не хватает? Описания требований на реализацию администрирования
временных зон?
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-09-25 12:40:33 UTC
Permalink
Post by Valentin Nechayev
В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации
их не считают.
SEL> Чего не хватает? Описания требований на реализацию администрирования
SEL> временных зон?

basedefs/V1_chap04.html:

===
As represented in seconds since the Epoch, each and every day shall be
accounted for by exactly 86400 seconds.
===

И формулы чуть выше на той же странице.


--netch--
Serguei E. Leontiev
2013-09-25 16:52:18 UTC
Permalink
Валентин, привет,
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by Valentin Nechayev
В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации
их не считают.
Чего не хватает? Описания требований на реализацию администрирования
временных зон?
===
As represented in seconds since the Epoch, each and every day shall be
accounted for by exactly 86400 seconds.
===
А мужики то и не знают, что сейчас у них Epoch = 1970-01-01 00:00:25 UTC

Hадо будет им сообщение об ошибке написать.

Что до реализации, как я понимаю, надо просто воспользоваться ключом -L
программы zic. Или, например,определением LEAPSECONDS при сборке мира
FreeBSD. Hу и обновляться не реже, чем раз в два-три месяца, что б
временные зоны уже имели информацию к моменту фактической корректировки.

P.S.

А так, нам же уже много эонов известно: православный календарь, юлианский
день, TAI - вот наш путь :)
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-09-25 17:03:55 UTC
Permalink
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by Valentin Nechayev
В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации
их не считают.
Чего не хватает? Описания требований на реализацию администрирования
временных зон?
===
As represented in seconds since the Epoch, each and every day shall be
accounted for by exactly 86400 seconds.
===
SEL> А мужики то и не знают, что сейчас у них Epoch = 1970-01-01 00:00:25 UTC

Hет, в basedefs/V1_chap03.html чётко определено, чему равно Epoch.

SEL> Hадо будет им сообщение об ошибке написать.

SEL> Что до реализации, как я понимаю, надо просто воспользоваться ключом -L

Реализацию менять не надо. Hадо просто аккуратно уточнить, что имеется
в виду под UTC в требованиях стандарта.

SEL> А так, нам же уже много эонов известно: православный календарь, юлианский
SEL> день, TAI - вот наш путь :)

Hу вот потому и приходится опираться на TAI.


--netch--
Serguei E. Leontiev
2013-09-25 17:59:04 UTC
Permalink
Валентин, привет,
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Post by Valentin Nechayev
В том, что UTC должен иметь вставные секунды, но строго по Posix их
нет, согласно применяемым формулам. Соответственно, все реализации
их не считают.
Чего не хватает? Описания требований на реализацию администрирования
временных зон?
===
As represented in seconds since the Epoch, each and every day shall be
accounted for by exactly 86400 seconds.
===
А мужики то и не знают, что сейчас у них Epoch = 1970-01-01 00:00:25 UTC
Hет, в basedefs/V1_chap03.html чётко определено, чему равно Epoch.
Hу ошиблись оне, я же "точно" знаю сколько секунд прошло с 1970-01-01
00:00:00 UTC, а сколько с 1970-01-01 00:00:25 UTC. :)
Post by Valentin Nechayev
Post by Serguei E. Leontiev
Hадо будет им сообщение об ошибке написать.
Что до реализации, как я понимаю, надо просто воспользоваться ключом -L
Реализацию менять не надо. Hадо просто аккуратно уточнить, что имеется
в виду под UTC в требованиях стандарта.
Что такое UTC, тоже определено. Оно хоть безобразно, зато единообразно.

А что-то менять придётся, либо Epoch в стандарте сделать дрейфующим (ну и
Coordinated кое-где вычеркнуть), либо формулу "Seconds Since the Epoch"
привести в соответствии с определением UTC.
Post by Valentin Nechayev
Post by Serguei E. Leontiev
А так, нам же уже много эонов известно: православный календарь, юлианский
день, TAI - вот наш путь :)
Hу вот потому и приходится опираться на TAI.
Hадо же с чего-то начинать.
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-09-25 18:11:07 UTC
Permalink
SEL> А что-то менять придётся, либо Epoch в стандарте сделать дрейфующим (ну и
SEL> Coordinated кое-где вычеркнуть), либо формулу "Seconds Since the Epoch"
SEL> привести в соответствии с определением UTC.

Теперь ты предлагаешь ещё более радикальные меры, чем те, которые
отрицал из моего предложения про FD_CLOEXEC:)

Впрочем, если ITU сделает, как грозится, то вставных секунд больше не
будет несколько веков. А потом резко сдвинут на час:)
Post by Valentin Nechayev
Post by Serguei E. Leontiev
А так, нам же уже много эонов известно: православный календарь, юлианский
день, TAI - вот наш путь :)
Hу вот потому и приходится опираться на TAI.
SEL> Hадо же с чего-то начинать.

Да, но приходится творчески игнорировать стандарты.


--netch--
Serguei E. Leontiev
2013-09-25 23:32:34 UTC
Permalink
Валентин, привет,
Post by Valentin Nechayev
Post by Serguei E. Leontiev
А что-то менять придётся, либо Epoch в стандарте сделать дрейфующим (ну и
Coordinated кое-где вычеркнуть), либо формулу "Seconds Since the Epoch"
привести в соответствии с определением UTC.
Теперь ты предлагаешь ещё более радикальные меры, чем те, которые
отрицал из моего предложения про FD_CLOEXEC:)
Hу, дык, как вариант, хотя бы исправить и написать, что в этой формуле
фигурируют абстрактные "POSIX calendar seconds", которые не следует путать
с секундами системы СИ (с колебаниями Цезия), а так же с секундами других
таймеров POSIX.
Post by Valentin Nechayev
Впрочем, если ITU сделает, как грозится, то вставных секунд больше не
будет несколько веков. А потом резко сдвинут на час:)
Хм. Это ж вряд ли сдвинут. Если быть оптимистами, то к этому моменту
понятие временной зоны полностью устареет. Hадо будет не только сдвигать,
но ещё и умножать на некие коэффициенты.
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Serguei E. Leontiev
2013-10-01 06:18:06 UTC
Permalink
P.S.
Post by Serguei E. Leontiev
Hу, дык, как вариант, хотя бы исправить и написать, что в этой формуле
фигурируют абстрактные "POSIX calendar seconds", которые не следует путать
с секундами системы СИ (с колебаниями Цезия), а так же с секундами других
таймеров POSIX.
А это ж у них в XRAT (Rationale, A. Rationale: Base Definitions, A.4
General Concepts, A.4.15 Seconds Since the Epoc) и написано, в частности
указано, что нигде в POSIX нет чёткого определения секунды, и секунда POSIX
не обязана совпадать с секундой СИ, полностью, всегда и для всех измерений.
Я же правильно понял их мысль?

A.4.15 Seconds Since the Epoch
...
Note that as a practical consequence of this, the length of a second as
measured by some external standard is not specified. This unspecified
second is nominally equal to an International System (SI) second in
duration. Applications must be matched to a system that provides the
particular handling of external time in the way required by the
application.
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Serguei E. Leontiev
2013-10-01 09:37:00 UTC
Permalink
P.P.S.

Только сейчас заметил, что:

A. Rationale for Base Definitions
...

Формально нормативный(!) раздел, о как?!

A.4.15 Seconds Since the Epoch
...
It is important that the interpretation of time names and seconds since the
Epoch values be consistent across conforming systems; that is, it is
important that all conforming systems interpret "536457599 seconds since
the Epoch" as 59 seconds, 59 minutes, 23 hours 31 December 1986, regardless
of the accuracy of the system's idea of the current time...

Валентин, а известно, что это за дата?
Post by Serguei E. Leontiev
P.S.
Post by Serguei E. Leontiev
Hу, дык, как вариант, хотя бы исправить и написать, что в этой формуле
фигурируют абстрактные "POSIX calendar seconds", которые не следует путать
с секундами системы СИ (с колебаниями Цезия), а так же с секундами других
таймеров POSIX.
А это ж у них в XRAT (Rationale, A. Rationale: Base Definitions, A.4
General Concepts, A.4.15 Seconds Since the Epoc) и написано, в частности
указано, что нигде в POSIX нет чёткого определения секунды, и секунда POSIX
не обязана совпадать с секундой СИ, полностью, всегда и для всех измерений.
Я же правильно понял их мысль?
A.4.15 Seconds Since the Epoch
...
Note that as a practical consequence of this, the length of a second as
measured by some external standard is not specified. This unspecified
second is nominally equal to an International System (SI) second in
duration. Applications must be matched to a system that provides the
particular handling of external time in the way required by the
application.
--
Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap)
Valentin Nechayev
2013-10-01 10:36:47 UTC
Permalink
SEL> Формально нормативный(!) раздел, о как?!

SEL> A.4.15 Seconds Since the Epoch
SEL> ...
SEL> It is important that the interpretation of time names and seconds since the
SEL> Epoch values be consistent across conforming systems; that is, it is
SEL> important that all conforming systems interpret "536457599 seconds since
SEL> the Epoch" as 59 seconds, 59 minutes, 23 hours 31 December 1986, regardless
SEL> of the accuracy of the system's idea of the current time...

SEL> Валентин, а известно, что это за дата?

Я подозреваю, что это всего лишь последняя секунда перед годом выпуска
первой версии Posix. Точно так же, как почему unixtime - от 70-го
года, а не 68-го или 71-го.


--netch--

Loading...