|
папка это файл?
|
|||
---|---|---|---|
#18+
Доброе время суток. Скоро закончу читать K&R, сколько усилий было потрачено хорошо хоть на период изоляции легло. но вот они пишут , что в Unix папка представляет собой файл с которым можно проделать _open("dirname",...) , а затем собрать статистику по средствам stat(fd,...). Но у меня Win7 (файл ли там папка ?), а папку я создал, но результат функции _open -1. конкретно пытался вот так : fd = _open("dirname", _S_IREAD, 0); параметры функции не нашел где почитать про эти всякие _S_IREAD и прочее для винды (наверно ж это дело отличается в зависимости от операционки ?) . видимо на таком низком уровне никто уже не работает и никому не интересно. исходя хотелось бы помощи в следующих вопросах: просьба подсказать как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? с какими параметрами ? p.s. папка реально существует там где надо. так как _open отрабатывает с простым текстовым созданным файлом ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 22:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? Никак. Во времена K&R никакой Windows ещё не существовало даже в проекте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 23:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? Никак. Во времена K&R никакой Windows ещё не существовало даже в проекте. да , но _open адаптирован для обычных файлов в винде. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 23:03 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
И чо? (с) Уже одно его название, начинающееся с подчёркивания, говорит, что это какая-то левая фигня, тянущаяся со времён доисторических. Удивительно не то, что оно не работает местами, а то, что местами оно таки работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 00:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И чо? (с) Уже одно его название, начинающееся с подчёркивания, говорит, что это какая-то левая фигня, тянущаяся со времён доисторических. Удивительно не то, что оно не работает местами, а то, что местами оно таки работает. Хорошо тогда, но тогда наверно есть что-то обновленное. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 01:22 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 папка это файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 01:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 что в Unix папка Мамка. Папки у тебя в венде, а в unix - каталоги. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 06:48 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
crutchmaster, Очень ценная информация. И как я раньше жил с этим заблуждением. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 06:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Файлы и папки - физически это последовательность секторов на диске. Дальше правила ФС на логическом уровне делят что считать папкой, что файлом, что пустым местом и т.д. Технически можно представить папку файлом и прочитать его, но не средствами С. Вобщем тебе туда лезть не за чем. Язык С тебе дает средства для работы с файлами и папками - вот ими и пользуйся, если чего-то не хватает - есть API используемой ОС. Если очень интересно как оно там внутри устроено, то гугли описание устройства файловой системы. В случае с виндовсом - NTFS. За полсотни лет с момента написания книги в организации ФС много чего поменялось. PS K&R это книга по языку С, но язык далеко не все охватывает, для некоторых задач требуется дополнительно использовать средства ОС и/или специализированные библиотеки. Например если интересно все возможности виндавса поизучать - читай Рихтера Windows via C/C++ . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T Файлы и папки - физически это последовательность секторов на диске. Дальше правила ФС на логическом уровне делят что считать папкой, что файлом, что пустым местом и т.д. Технически можно представить папку файлом и прочитать его, но не средствами С. Вобщем тебе туда лезть не за чем. Язык С тебе дает средства для работы с файлами и папками - вот ими и пользуйся, если чего-то не хватает - есть API используемой ОС. Если очень интересно как оно там внутри устроено, то гугли описание устройства файловой системы. В случае с виндовсом - NTFS. За полсотни лет с момента написания книги в организации ФС много чего поменялось. PS K&R это книга по языку С, но язык далеко не все охватывает, для некоторых задач требуется дополнительно использовать средства ОС и/или специализированные библиотеки. Например если интересно все возможности виндавса поизучать - читай Рихтера Windows via C/C++ . ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:18 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) Задача какая? Получить содержимое папки виндовса? Изучай FindFirstFile() из WinAPI ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 а тут или найти аналог для винды Какой аналог и почему он должен быть? В Windows нет posix. Цепляй вендовые либы, там свои реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:35 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) Задача какая? Получить содержимое папки виндовса? Изучай FindFirstFile() из WinAPI ОС: win7. задача вывести список файлов в папке. А если в папке есть подпапки тогда выводить и их файлы, если в тех есть подпапки то выводим и их файлы .... в общем по сути рекурсивный обход дерева каталогов . findfirst это как бы другая концепция решения задачи. можно , конечно. я просто думал, что вот эти _open они ведь работают для винды в случае простых файлов. предполагал, что и для моей задачи адаптированы и можно ей прочитать папку как файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 ну так аналоги _open должны быть Условный "юниксвей" исходит из не слишком практичной мысли, что небольшого количества примитивов достаточно для (самостоятельного) изготовления "чего угодно". На даже в POSIX API есть отдельный readdir, поскольку "проколоться" самостоятельно разбирая (известную) структуру каталога - как два пальца об асфальт. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov andron81 ну так аналоги _open должны быть да мне должны ! а если серьёзно если оставили функцию _open для обычных файлов, а не бросили её и не написали свою(хотя и свои вроде бы написали, но об аналогах никто не написал), то наверно могли и к папке такое же отношение сохранить(то есть как файлу). Название темы какое ? Папка это файл ? в винде выходит, что нет ! такого же ответа мне никто не даёт. вот в K&R пишут, да текст древний но всё - таки : Так как в системе UNIX каталог — это тоже файл, функции ls, чтобы добраться до имен файлов, нужно только его прочитать. Но чтобы получить другую информацию о файле (например узнать его размер), необходимо выполнить системный вызов. В других системах (в MS-DOS, например) системным вызовом приходится пользоваться даже для получения доступа к именам файлов. Наша цель — обеспечить доступ к информации по возможности системно-независимым способом несмотря на то, что реализация может быть существенно системно-зависима. p.s. До этого задачки под юникс в книге удавалось на винду переписать. С вашей помощью , да. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 09:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Basil A. Sidorov пропущено... Кому должны??? Вам? да мне должны ! а если серьёзно если оставили функцию _open для обычных файлов, а не бросили её и не написали свою(хотя и свои вроде бы написали, но об аналогах никто не написал), то наверно могли и к папке такое же отношение сохранить(то есть как файлу). Название темы какое ? Папка это файл ? в винде выходит, что нет ! такого же ответа мне никто не даёт. вот в K&R пишут, да текст древний но всё - таки : Так как в системе UNIX каталог — это тоже файл, функции ls, чтобы добраться до имен файлов, нужно только его прочитать. Но чтобы получить другую информацию о файле (например узнать его размер), необходимо выполнить системный вызов. В других системах (в MS-DOS, например) системным вызовом приходится пользоваться даже для получения доступа к именам файлов. Наша цель — обеспечить доступ к информации по возможности системно-независимым способом несмотря на то, что реализация может быть существенно 1. каталог это файл и в Windows, только что бы открыть его как файл нужно пользоваться WinApi, в общих библиотеках ЯП теперь такое не поощряется и при общем практическом программировании вам это дожно быть не интересно 2. системным вызовам называют вызов который перключает контекст выполнения на ядро системы. в MSDos вы сами писали системные вызовы (хотя для той модели памяти это определение и условно, физической изоляции ядра не было), напрямую вызывая прерывания, в Winapi это делают за вас реализации функции API системы (в Linux кстати тоже используется такая прослойка). Теперь описания вызовов скрыты от вас и напрямую их вызывать не стоит. во-первых они не документированы, во-вторых - могут поменяться 3. независимый способ просмотра каталогов представляют все существующие промышленные языки в своём RTL, который написан под конкретную систему, но с практически одинаковым интерфейсом для разных ОС - тынц вот этими интерфейсами и пользуйтесь на здоровье (opendir, readdir, closedir), и будет вам платформонезависимое счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:09 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. в юникс можно. а тут фигвам ... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
crutchmaster andron81 что в Unix папка Мамка. Папки у тебя в венде, а в unix - каталоги. нет там каталогов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Доброе время суток. Скоро закончу читать K&R, сколько усилий было потрачено хорошо хоть на период изоляции легло. но вот они пишут , что в Unix папка представляет собой файл с которым можно проделать _open("dirname",...) , а затем собрать статистику по средствам stat(fd,...). Но у меня Win7 (файл ли там папка ?), а папку я создал, но результат функции _open -1. конкретно пытался вот так : fd = _open("dirname", _S_IREAD, 0); параметры функции не нашел где почитать про эти всякие _S_IREAD и прочее для винды (наверно ж это дело отличается в зависимости от операционки ?) . видимо на таком низком уровне никто уже не работает и никому не интересно. исходя хотелось бы помощи в следующих вопросах: просьба подсказать как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? с какими параметрами ? p.s. папка реально существует там где надо. так как _open отрабатывает с простым текстовым созданным файлом Мне кажется у меня дежа-вю и я уже писал тебе. Если ты - программист под Windows - то для работы с файловой системой тебе надо использовать Windows API для работы с файлами и каталогами. NTFS и Unix файловые системы очень архитетурно отличаются. Например в Unix можно создавать символические линки на файлы. Можно создавать именованные канальные устройства (файл-труба) где с одной стороны пишут и с другой читают. И есть определённые старые договорённости касающиеся наименований файлов (case-sensitive) и Lookup (тоже case-sensitive). Есть биткарта атрибутов RWX продублированных трижды для себя и для группы и для всех. И есть экзотические биты типа sticky. Все это в Windows НЕ РАБОТАЕТ. Тоесть. Если ты решил и дальше серъезно углубляться в архитектуру K&R в части файловой системы то тебе просто органически необходимо уходить с Windows. Или будешь почемучкой и будешь постоянно приходить сюда и спрашивать почему у тебя в Windows не выходит что-то сделать. Ты уже далеко вышел за рамки С/C++. И отвечая на твой вопрос. Нет. Папка это не файл. И незачем тебе дальше углубляться в этот вопрос если ты не хочешь создавать свои драйверы файловых систем. Почитай по ключевым словам Virtual File System, Inode для кругозора. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 11:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Задачу надо решить в концепции _open Вы как то рано в в архитектуру полезли) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 petrav andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. в юникс можно. а тут фигвам ... Где он этот юникс? Забей на это упражнение, эта тема нынче очень устарела, подход работы с папками в корне поменялся, потому не работает. Переходи к следующему упражнению. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:19 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T Переходи к следующему упражнению. +1 На данном этапе тоже советую автору делать упражнения из сети или книги. Архитектура и "как лучше" - потом. Главное набить руку писать код без ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:28 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 пропущено... в юникс можно. а тут фигвам ... Где он этот юникс? Забей на это упражнение, эта тема нынче очень устарела, подход работы с папками в корне поменялся, потому не работает. Переходи к следующему упражнению. это одно из последних, скоро глупости закончатся с моей стороны тут. Цель упражнения не архитектура и низкоуровневый фарш. надо в этих рамках и проработать. а если поставить грубо говоря виртуальную машину Юникс . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:53 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 а если поставить грубо говоря виртуальную машину Юникс . Попробуй, только где его взять? Умер он давно. https://qastack.ru/unix/33750/is-there-a-way-to-download-pure-unix Unix как отдельная сущность не существует как современная операционная система. Как указано в комментариях для unix-производных: Несколько систем начинали с исходного кода Unix, но со временем он был записан, поэтому оригинальный код Unix не сохранился. Наиболее известными примерами являются OpenSolaris, FreeBSD, NetBSD и OpenBSD. ... Современные дистрибутивы не содержат какого-либо оригинального кода Unix или, по крайней мере, ни одного из свободно доступных вариантов с открытым исходным кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:02 |
|
|
start [/forum/topic.php?fid=57&fpage=6&tid=2017328]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 150ms |
0 / 0 |