OCTAGRAM

If the character encoding of the input is stateful, the iconv() function can also convert a sequence of input bytes to an update to the conversion state without producing any output bytes; such input is called a shift sequence.
Пытался понять, iconv отказывается есть всё только когда наезжает на шляпу или для неполных последовательностей тоже. Насколько я могу понять это “can also”, как хочет, так себя и ведёт.

Strephil

Что-то я не пойму, как скопировать содержимое папки. :-(

Например, у меня есть папка /pr0n, и я хочу скопирвать на флешку, но владелец папки pr0n другой, у меня нет доступа к содержимому этой папки.

$ sudo cp -r /home/pr0n/* /mnt/sdh1

это, конечно, не работает, потому что звёздочка раскрывается раньше, чем выполняется sudo.
тут мог бы помочь rsync, там в зависимости от / в конце источника копируется либо сама папка, либо её содержимое. Но я никак не могу запомнить, какой вариант какой.

Залогинился root'ом, копирую.

Ядро 4.10.11. Как же всё тормозит при записи на флешку!

OCTAGRAM

Разобрался с конвертацией времени. Как выясняется, в GreyLink DC++ время хранится совсем не в том формате, в котором я подумал, а в FILETIME. Также выяснилось, что и FILETIME в Windows, и time_t в POSIX могут быть как с високосными секундами, так и без. FILETIME, похоже, с високосными секундами не встречается, но тут пишут, что это не исключено. time_t согласно POSIX.1 тоже не должен поддерживать их:
IEEE Std 1003.1-1988 (``POSIX.1'') legislates that a time_t value of 536457599 shall correspond to "Wed Dec 31 23:59:59 GMT 1986." This effectively implies that POSIX time_t's cannot include leap seconds and, therefore, that the system time must be adjusted as each leap occurs.… но я смотрю на маны posix2time и time2posix и вижу, что совместимость с POSIX где-то может быть сломана в угоду монотонности времени. Всегда надо уточнять, с високосными секундами время или нет, иначе будет разъезжаться на 25 секунд, и с каждым годом всё больше. Вот, допустим, MySQL поддерживает високосные секунды в полях TIMESTAMP, если работать с этими значениями через функцию UNIX_TIMESTAMP. Но как мы уже выяснили, подлинный UNIX time_t не содержит високосных секунд, значит, это может быть только модифицированный. И если вы создаёте значение инструментом, который не вставляет эти секунды, у вас время начнёт разъезжаться. Вот в JavaScript по стандарту временная шкала нелинейная, как и в POSIX.1. Но если POSIX.1 где-то нарушается, то, может быть, и EcmaScript тоже? Давайте проверим:

qnikst

Есть программа (RTS), которая может создавать треды в разные странные моменты обычным pthread_create . Есть специальный superduper_thread_create, который создает нужные мне треды, но взять и перевести на него RTS неполучится (лень). Так же есть так же специальный метод, который позволяет конвертировать обычный posix тред в superduper тред.

Вопрос, есть ли какие-либо средства для автоматизации вызова функции конвертации треда в специальный после вызова pthread_create

Equidamoid

У меня есть скрипт, скрипт работает с несколькими разными версиями данных. Данные принудительно качаются в один и тот же каталог и с этим ничего не поделать (привет идиотской системе perforce). Потому хочу сделать блокировку этого каталога. Как это лучше делать? Требуется полностью исключить возможные гонки и корректно обрабатывать падения (чтобы никаких "файл заблокирован, но похоже, что владелец издох, проверь сам и удали воот этот файл").

OCTAGRAM

Была для TCP/IP такая полезная утилитка netcat. А потом все повадились ходить через SOCKS, и даже были сети с forced proxy socks. Без SOCKS стало никуда, и тогда был сделан socat. А сейчас все за NAT, Teredo не настроен, и стало никуда без WebRTC. Теперь нужен новый *cat.

Меня огорчает, что я так и не нашёл ни одной реализации Interactive Connection Establishment для libuv

Dorif

Привет пользователям UNIX-like систем!

Я пишу небольшой набор открытых и свободных coreutils (небольшой проект, не такой фичастый, как GNU coreutils) для POSIX-совместимых ОС. Проект называется escu(сокращение от Extremelly Small CoreUtils). Писать начал, когда пожелав выучиться системному программированию по исходникам GNU Coreutils, но не смог разобраться в spaghetti code и решил их переписать согласно спецификациям The OpenGroup.

Уже есть утилиты: basename, chroot, dirname, false, head, link, ln, logname, ls, mkfifo, mv, pwd, test, true, tty, uname, unlink, yes. Многие из них уже полностью POSIX-совместимы. Я использую системные вызовы для снижения накладных расходов, а также стараюсь писать максимально простой код для облегчения понимания новичками.

Проект нацелен на максимальную переносимость, поэтому при написании используются только возможности стандартной библиотеки языка C, а для сборки будут использоваться только POSIX-совместимые make, компилятор языка C и командная оболочка.

Релизы будут выпускаться тогда, когда они будут готовы, за исключением багфиксов.

Комментарии, предложения и патчи приветствуются!

Исходный код: github.com

Strephil

Что касается
$ expr a : 'a\( b\)*'
man 1p expr:
Alternatively, if the pattern contains at least one regular expression subexpression "[\(...\)]", the string corresponding to "\1" shall be returned.
По кодам возврата:
0 The expression evaluates to neither null nor zero.
1 The expression evaluates to null or zero.

Так что в GNU всё по POSIX, а OpenBSD — увы.

Arepo

знатоки, подскажите, позволяет ли посикс или, накрайняк, линух, указать драйверу ФС, что на месте указанной области файла неплохо бы было сделать дырку? Есть большой очень разреженный файл, в который пишутся данные и затираются нулями старые, так вот на месте старых данных и надо делать дырки. Очень не хочется периодически пересоздавать этот файл только для того, чтобы дырки расставить

dr-Chaos

Господа, а можно как-то на POSIX make изобразить такую конструкцию:

dir/%.o:
   cd dir && make %*.o

Т.е. часть *.c файлов для собрки лежит в поддиректории и для того чтоб их сбилдить надо вызвать make foo.o в этой поддиректории. На GNU make я это изобразил, а вот на POSIX как-то херово :(

Strephil

Вот, например, есть моя директория, в ней лежат не мои файлы, но я их могу читать.
Почему я не могу использовать chown, чтобы они стали моими?
Почему я должен использовать какой-то велосипед, сначала копируя эти файлы, потом удаляя исходные, потом перемещая скопированные на место исходных? Это обязательно должно быть так, да?

Strephil

В четвертой версии GNU AWK функции sub были приведены в соответствие со стандартом POSIX 2008.
Неделю назад пришел баг-репорт, что gawk работает согласно POSIX! Ужас!
…я оказался прав: главный разработчик gawk Аарон Роббинс подготовил патч, возвращающий старое поведение. В ближайшее время он будет добавлен в ветку git gawk-4.0-stable.
GNUgNUGNugnu!!!!!1111

Elemir

О совместимости. Многие линакс-фаги называют гну/линакс UNIX-like и обосновывают это тем, что оная является POSIX-совместимой, хоть и не сертифицирована. Благодаря вчерашнему нытью @lexszero обнаружил интересную вещь:
elemir@netbook ~ $ (cat test.c && gcc -std=c99 -D_POSIX_C_SOURCE=200809L -lm test.c -o test 2>&1) | wgetpaste
Your paste can be seen here: paste.pocoo.org
elemir@netbook ~ $ man 0p math.h | wgetpaste
Your paste can be seen here: paste.pocoo.org

И сколько же таких ошибок и несуразностей?

Strephil

awk никому не нужен. Для совсем простого слишком сложен, для чуть более сложного слишком ущербен. Вот нафига он стандарт POSIX? Даже не то, что лишние буквы. Сколько поощрение его включения в дистрибутивы, его изучения, использования.
Был бы стандартом, например, bash со всеми его башизмами. Или другие расширения GNU… Было бы куда лучше.

Strephil

Ура! У меня новая libcap (теперь 2.20; тихо и незамѣтно вышла в день Богоявленiя, еще шесть дней назадъ; нашел на kernel.org)
Измѣненiй немного: добавлена поддержка новаго разрѣшенiя CAP_SYSLOG (названiе говоритъ само за себя).
+ setcap теперь по дефолту имѣетъ inherity capability. Интересно, зачѣмъ? Въ Arch это отключено… вотъ тутъ нужно будетъ поразбираться.
sites.google.com

smeea

Объясните почему посикс шелл на этом сосет хуйцы:
~ % cat 1
#!/bin/bash
echo ${@-foo}
for i in "$@"; do
echo "bar"
done
~ % ./1
foo
~ % cat 2
#!/bin/sh
echo ${@-foo}
for i in "$@"; do
echo "bar"
done
~ % ./2

Почему баш корректно считает переменную аргумента неопределенной и не запускает луп, а так же выводит заместо неопределенной переменной заданное 'foo', а каноничный шелл делает непонятное — для первой команды он считает переменную определенной (но пустой) и выводит ее значение, но луп в то же время не запускает, как будто она не определена?