сделать lsattr в си

yroslavasako

man что я должен сделать, чтобы узнать, как программно проверить атррибуты файла в линуксе? Я хочу обработать результаты аналогично тому, что показывает lsattr, но без вызова консольной программы, с помощью системного вызова. Получасовой гугл пока ничего не дал, кроме ссылок на написание драйверов и реализацию механизма со стороны ядра
update:
strace показал, что я должен читать man ioctl. Но этот самый ioctl подозрительно пустой ман содержит. Это что предложение читать исходники? Что же, система помощи линукса отличается от MSDN в лучшую сторону, способствует личностному росту
update2:
обнаружил посыл в ioctl_list

salamander

А почитать исходники lsattr не пробовал? Я за пару переходов к определению попал на функцию fgetflags в lib/e2p/fgetflags.c (меньше 100 строк кода которая делает то, что тебе надо. Если я, конечно, правильно понял, что тебе надо.
Ну и да, man ioctl в твоем случае бесполезен, поскольку это абстрактный интерфейс, а тебе нужно знать, какие конкретные функции скрываются за ним.

margadon

система помощи линукса отличается от MSDN в лучшую сторону
ну как минимум хорошо, что эти самые исходники есть, которые можно читать
в MSDN такой роскоши нет

yroslavasako

Ну просто линукс другой. Можно оптимистично подходить к вопросу и утверждать, что недокументированных функций у него нет, если считать исходники документацией. Если же подходить пессимистично, то и документированных функций у него не хватает, поскольку исходники всё же технически документацией не являются. Возможности шире, трудности на пустом месте, т.е. не вызванные объективной сложностью устройства или богатством возможностей, тоже есть.

apl13

Можно оптимистично подходить к вопросу и утверждать, что недокументированных функций у него нет, если считать исходники документацией.
Ну в винде, например, документации на функции вообще нет. Ни исходников, ни вообще никакой.
В онлайне, по крайней мере.

yroslavasako

ну вообще-то, я когда-то прогал под win32 и помню читал документацию на системные функции

Dasar

трудности на пустом месте
это же как раз следствие желаемой тобой ситуации, когда есть только одна либа, а стандарт и документация делаются когда-нибудь потом

apl13

ну вообще-то, я когда-то прогал под win32 и помню читал документацию на системные функции
А можешь пример показать?

yroslavasako

это же как раз следствие желаемой тобой ситуации, когда есть только одна либа, а стандарт и документация делаются когда-нибудь потом
ты приписываешь мне то, что я не говорил. Я говорил об отсутствии стандарта, но не документации. В третий раз посылаю тебя изучать Qt как пример.

yroslavasako

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

yroslavasako

А можешь пример показать?
http://msdn.microsoft.com/en-us/library/aa383688.aspx

vall

если тебе нужны атрибуты ext2-ext4 то логично искать интерфейс в e2fsprogs/e2fslibs

yroslavasako

у тебя что chamrajnagar заигнорен? Я там и искал strace, он посмотрел его исходники. Документации (man) всё равно нет на функции библиотеки e2fs.

Dasar

ты приписываешь мне то, что я не говорил. Я говорил об отсутствии стандарта, но не документации.
получается, что тогда разработка документации - это выброшенные на ветер деньги, правда все равно в коде. И все приучаются смотреть на текущее поведение либы, а не на документацию.

yroslavasako

Во-первых, я не вижу откуда взялась твоя импликация.
Во-вторых, подтверди или отвергни Qt как успешный пример, не стандартизированной, но хорошо документированной библиотеки. А то я уже устал тебе приводить его в пример.

Dasar

Где смотреть как в QT работают margin/padding/border? Съедаются они, не съедаются?
Запрос html margin padding documentation меня выкидывает на общую документацию, где эти нюансы расписаны.
Запрос qt margin padding border documentation выкидывает 9-ой ссылкой на документацию по классу QTextFrameFormat (ссылки до этого идут на сторонние сайты). Нюансы поведения при этом не расписаны. Например, margin-ы от двух разных контролов схлопываются или нет?
На примере html мы видим описание общего подхода для всех контролов, для qt - есть только описание для QTextFrameFormat, а если ли какие-то общепринятые правила при этом неизвестно.

tokuchu

у тебя что chamrajnagar заигнорен? Я там и искал strace, он посмотрел его исходники. Документации (man) всё равно нет на функции библиотеки e2fs.
Только вот strace показывает обращения к ядру, а не к библиотекам. Попробуй ltrace — может с ним что покажет.

yroslavasako

Запрос qt margin padding border documentation выкидывает 9-ой ссылкой на документацию по классу QTextFrameFormat
тут следует уточнить поисковик и твой профиль в нём. У меня гугол первой ссылкой на запрос "qt margin padding border" выдал следующую страницу документации http://doc.qt.digia.com/qq/qq20-qss.html
Ещё один пример замечательной и нестандартной либы - это borland c++ builder. Система документации и кривая вхождения на тот момент были беспрецедентными. При этом от си только название, стандартов не поддерживало.

Dasar

У меня гугол первой ссылкой на запрос "qt margin padding border" выдал следующую страницу документации http://doc.qt.digia.com/qq/qq20-qss.html
1. какое отношение сайт digia имеет к QT?
2. по твоей ссылке не написано, margin-ы от двух контролов схлопываются или нет

marat7256

1. какое отношение сайт digia имеет к QT?
С выходом из анабиоза!

yroslavasako

1. какое отношение сайт digia имеет к QT?
основной мейнтейнер и владелец прав.
2. по твоей ссылке не написано, margin-ы от двух контролов схлопываются или нет
Ну если понимать буквально, то не схлопываются.
Но мне кажется, ты не понимаешь всей прелести единой либы. Ты можешь это проверить на своей машине, выяснить в деталях поведение и быть уверенным, что ровно таким же оно будет и на всех остальных машинах (и нет зависимостей от разных типов браузеров).
Документация может не выдавать совсем мелкие детали, но для того, чтобы написать пример её хватает. Не надо ничего дебагать, копаться в исходниках. Созадёшь быстро проект и проверяешь.

Dasar

Ты можешь это проверить на своей машине, выяснить в деталях поведение и быть уверенным, что ровно таким же оно будет и на всех остальных машинах (и нет зависимостей от разных типов браузеров).
зависимости от версий либы, зависимости от контролов других производителей, зависимости от ОС, зависимости от платформы, зависимости от языка (c++/python и т.д. зависимости от culture-ы (русский, английский и т.д.) никуда же не делись.
и получается, что всё это надо проверять для всех вариантов, вместо того, чтобы один раз выучить правила игры. Также приходится постоянно опасаться, что в определенный это может поменяться: ни имеющееся поведение в прошлом, ни документация не обязана к соблюдению, в отличии от стандарта

Dasar

основная проблема, что разработчик может в либу пропустить любое говно, и при этом нет способа перепроверить через другие источники - такое поведение кода ошибочное, или так и должно быть.

yroslavasako

зависимости от ОС, зависимости от платформы,
Мне кажется, ты меняешь условия задачи на ходу.
Кстати, о маргинах. Я подумал немного и нашёл доку. Схлопывание маргинов в общем случае не должно происходить. С чего бы это. Но вот если несколько виджетов является коллекцией и идут вместе, то вопрос становится осмысленным. Так что я просто посмотрел на доку QBoxLayout:

QBoxLayout also includes two margin widths:
setContentsMargins sets the width of the outer border on each side of the widget. This is the width of the reserved space along each of the QBoxLayout's four sides.
setSpacing sets the width between neighboring boxes. (You can use addSpacing to get more space at a particular spot.)
The margin default is provided by the style. The default margin most Qt styles specify is 9 for child widgets and 11 for windows. The spacing defaults to the same as the margin width for a top-level layout, or to the same as the parent layout.

yroslavasako

проблема ухудшения кода либы не стоит остро, если либа - опенсорс. Есть куда бежать в худшем случае (вспоминая побег libreoffice от оракла)

Dasar

Так что я просто посмотрел на доку QBoxLayout:
т.е. если у контролов стоят margin-ы по 5, то расстояние от края контейнера будет 5, а между контролами будет 10?

Dasar

проблема ухудшения кода либы не стоит остро, если либа - опенсорс.
конечно, стоит. Получается, что сначала разработчик либы допускает ошибку(кривое поведение) и оно сразу же становится стандартом де факто, потому что ты же сам утверждаешь, что ориентироваться необходимо на код, а не на здравый смысл или на что-то еще.

Dasar

setSpacing sets the width between neighboring boxes
spacing может быть отрицательным? а margin отрицательным? а padding? а border?
если в текущей версии отрицательное знание прокатывает, то можно ли на это расчитывать в будущем?

yroslavasako

если в текущей версии отрицательное знание прокатывает, то можно ли на это расчитывать в будущем?
открой для себя системы сборки с версионностью либ.
для регрессионного тестирования можно юзать CV либы

Dasar

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

yroslavasako

и как это поможет, когда одновременно необходим функционал из новой версии либы, и при этом есть потребность переиспользовать свой старый код?
1. Ты ничего не теряешь.
2. Ты переходишь на новую либу, только если переход себя окупает.
Кто-то любит тестинг, кто-то релиз. Ну это не повод ограничивать авторов в публикации обоих вариантов.

vall

у тебя что chamrajnagar заигнорен? Я там и искал strace, он посмотрел его исходники. Документации (man) всё равно нет на функции библиотеки e2fs.
Мне проще ответить чем читать весь флуд. Просто это логично что нужно смотреть в тулзу или либу а не в общий ман т.к. это fs-specific

procenkotanya

Просто это логично что нужно смотреть в тулзу или либу а не в общий ман т.к. это fs-specific
Хм, не понимаю. Extended attributes поддерживают разные fs, так что имеет смысл смотреть apropos xattr, не?

tokuchu

Хм, не понимаю. Extended attributes поддерживают разные fs, так что имеет смысл смотреть apropos xattr, не?
Это у него вроде не xattr. Это атрибуты на ext* типа immutable.

bleyman

А почитать исходники lsattr не пробовал?

Хех, у меня первый позыв был предложить запустить под strace. Доктор, это лечится?
Кстати как мне кажется поиск исходников всяких гну/линукс тулзов дико неинтуитивен, или я это неправильно делаю?

Anturag

А кто его знает, как ты это делаешь, тащем-та в дистрибутивах есть пакеты сорцов, если этого недостаточно, то в метаданных обычно прописаны ссылки на домашнюю страницу проекта и основной репозиторий проекта.

zya369

да норм в strace сначала смотреть
но вот спрашивать потом на форуме вместо просмотра исходников - уже странно
Кстати как мне кажется поиск исходников всяких гну/линукс тулзов дико неинтуитивен, или я это неправильно делаю?

$ which lsattr 
/usr/bin/lsattr
$ dpkg -S /usr/bin/lsattr
e2fsprogs: /usr/bin/lsattr
$ apt-get source e2fsprogs

:D

yroslavasako

Кстати как мне кажется поиск исходников всяких гну/линукс тулзов дико неинтуитивен, или я это неправильно делаю?
equery belongs /usr/bin/lsattr
emerge -fv sys-fs/e2fsprogs

yroslavasako

но вот спрашивать потом на форуме вместо просмотра исходников - уже странно
я просто воспитан в почтении к документации и всегда исходил из предположения, что её надо читать. До последнего надеялся, что я просто не нашёл где. Потому что исходники, конечно, осиливаются, но это трудозатратно и ты до конца не уверен, что можешь доверять полученным выводам.

apl13

1. какое отношение сайт digia имеет к QT?
Даркгрей такой даркгрей!

serega1604

Документации (man) всё равно нет на функции библиотеки e2fs.
лично у меня есть документация в info и html, возьми info2man и переведи в man, если читать info тебе не позволяет религия, либо отпишись гентушным ментейнерам в irc, чтобы они срочно перестали выпиливать документацию при сборке.

domovoj

Орейлевская The Linux Programming Interface под рукой сильно упрощает жизнь в таких ситуациях. Да и вообще полезная.

yroslavasako

The Linux Programming Interface
Воистину. Ну вот и нашлась дока. Чуть больше суток искалась
Оставить комментарий
Имя или ник:
Комментарий: