ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ статусС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ записи. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ нСльзя ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„Π°ΠΉΠ»Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ open ()ΠΈΠ»ΠΈ fopen (), Π° Π΄Π°ΠΆΠ΅ Ссли ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… сильно зависСло Π±Ρ‹ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы, ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ программист. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ статусС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ
  • 1.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° dirent
  • 1.2 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
  • 1.3 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° struct dirent
  • 1.4 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅
  • 2. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ
  • 2.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π»ΠΎΠΊ-схСмы Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°
  • 2.2 ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ систСмного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ схоТСй Π·Π°Π΄Π°Ρ‡ΠΈ
  • 2.3 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для автоматичСского обновлСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

    ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ЦСлью Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся модСрнизация Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΡ‚атусС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

1.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° dirent

Dirent — входная структура ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, нСзависимая ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ структуры ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° dirent опрСдСляСт структуру ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π½Π΅Π·Π°Π²ΠΈΡΡΡ‰ΡƒΡŽ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΠ±Ρ‰ΡƒΡŽ для Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… структур ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Набор этих структур возвращаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ систСмного Π²Ρ‹Π·ΠΎΠ²Π° getdents.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΈΡ€Π΅ΠΊΡ‚ориями Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° DIR (ΠΏΠΎ ΡΠΌΡ‹ΡΠ»Ρƒ ΠΎΠ½Π° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ‚ΠΈΠΏ FILE).

1.2 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ записи. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ нСльзя ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„Π°ΠΉΠ»Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ open ()ΠΈΠ»ΠΈ fopen (), Π° Π΄Π°ΠΆΠ΅ Ссли ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… сильно зависСло Π±Ρ‹ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы, ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ программист.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° dirent. h: opendir (), readdir () ΠΈ closedir () — это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации. Π˜Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ схоТС с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ open/read/close ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ: функция readdir ()Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ структуру (Ρ‚ΠΈΠΏ struct dirent) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ opendir () ΠΈ readdir () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ NULL, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π° Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ errno записываСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Если readdir () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ NULL ΠΈ errno равняСтся 0 (ΠΈΠ»ΠΈ, ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, EOK ΠΈΠ»ΠΈ ENOERROR), это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ большС Π½Π΅Ρ‚ записСй.

НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ содСрТит записи «.» (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ°ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³) ΠΈ «.» (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³). Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ этих Π΄Π²ΡƒΡ… записСй, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ readdir () Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ возвращаСмая структура являСтся статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая хранится Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных UNIX-систСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ readdir_r (), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ свой ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

1.3 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° struct dirent

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX 1003.1 опрСдСляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ элСмСнт структуры struct dirent — массив элСмСнтов Ρ‚ΠΈΠΏΠ° char с ΠΈΠΌΠ΅Π½Π΅ΠΌ d_name. Π­Ρ‚ΠΎ имя элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Π²ΠΈΠ΄Π΅ стандартной NUL-Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ строки. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² ΡΡ‚ΠΎΠΉ структурС зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ UNIX-систСмы.

ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ находится Π² struct dirent, Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся пСрСносимым. БовмСстимыС систСмы ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов Π² ΡΡ‚ΠΎΠΉ структурС. ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ этой структуры, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ эти элСмСнты ΠΊΠ°ΠΊ нСпСрСносимыС, ΠΈ Π² ΠΈΠ΄Π΅Π°Π»Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΡΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ ΡΠ°ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π² struct dirent.

НапримСр, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ UNIX-систСмы содСрТат ΠΏΠΎΠ»Π΅ d_type ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… констант, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ stat (). ΠšΡ€ΠΎΠΌΠ΅ избавлСния ΠΎΡ‚ Π½Π΅ΠΎΠ±Ρ…одимости лишний Ρ€Π°Π· Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ это нСпСрСносимоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов запроса ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π·Π° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Ѐункцияstat () Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ UNIX-систСм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

1.4 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅ ΠšΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ², находящихся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСкоторая Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация, которая внСсла Π±Ρ‹ ΡΡΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, нСльзя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΎΡ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Ѐункция stat () заполняСт структуру struct stat ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅; Ссли вмСсто ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° имССтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ совмСстно с fstat (). Если Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ символичСскиС ссылки, Ρ‚ΠΎ Π²ΠΌΠ΅ΡΡ‚Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lstat ().

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ struct dirent, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ readdir (), struct stat ΠΈΠΌΠ΅Π΅Ρ‚ довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… стандартных ΠΏΠΎΠ»Π΅ΠΉ:

Β· st_mode — ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅) ΠΈ Ρ„Π»Π°Π³ΠΈ.

Β· st_ino — порядковый Π½ΠΎΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°.

Β· st_dev — устройство, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСн Ρ„Π°ΠΉΠ».

Β· st_nlink — счСтчик числа связСй.

Β· st_uid — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ-Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Ρ„Π°ΠΉΠ»Π°.

Β· st_gid — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹-Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°.

Β· st_size — Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ… (для Ρ„Π°ΠΉΠ»ΠΎΠ² regular).

Β· st_atime — врСмя послСднСго доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.

Β· st_mtime — врСмя послСднСй ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°.

Β· st_ctime — врСмя создания Ρ„Π°ΠΉΠ»Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ макрос S_*() для поля st_mode, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°:

Β· S_ISBLK (mode) — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»? (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π±Π»ΠΎΡ‡Π½ΠΎΠ΅ устройство).

Β· S_ISCHR (mode) — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»? (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это символьноС устройство).

Β· S_ISDIR (mode) — ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³?

Β· S_ISFIFO (mode) — UNIX-ΠΊΠ°Π½Π°Π» (pipe) ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» Ρ‚ΠΈΠΏΠ° FIFO?

Β· S_ISLNK (mode) — символичСская ссылка?

Β· S_ISREG (mode) — ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»?

Ѐункция stat () выполняСтся достаточно ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм, поэтому Π»ΡƒΡ‡ΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π½Π° ΡΠ»ΡƒΡ‡Π°ΠΉ, Ссли ΠΎΠ½Π° понадобится ΠΏΠΎΠ·ΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

#include

#include

#include

#define FOUND 0

#define NOT_FOUND 1

#define READ_ERROR 2

#define OPEN_ERROR 3

#define NOARG 4

int main (int argc, char *argv []) {

struct dirent *dp;

DIR *dirp;

const char *name;

if (argc > 1) {

name = argv [1];

} else {

return NOARG;

}

dirp = opendir («.»);

while (dirp) {

errno = 0;

if ((dp = readdir (dirp)) ≠ NULL) {

if (strcmp (dp->d_name, name) == 0) {

closedir (dirp);

return FOUND;

}

} else {

if (errno == 0) {

closedir (dirp);

}

closedir (dirp);

}

}

return OPEN_ERROR;

}

2. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

2.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π»ΠΎΠΊ-схСмы Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Рисунок 4. Π‘Π»ΠΎΠΊ-схСма

2.2 ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ систСмного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ схоТСй Π·Π°Π΄Π°Ρ‡ΠΈ

#include

#include

#include

extern char *ctime ();

main ()

{

time_t last; struct stat st;

for (stat («.», &st), last=st.st_mtime;; sleep (2))

{

stat («.», &st);

if (last ≠ st. st_mtime)

{

last = st. st_mtime;

printf («Π‘Ρ‹Π» создан ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»: %s» ,

ctime (&last));

}

}

}

Рисунок 1. ScreenShot исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рисунок 2. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

dirent ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

2.3 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для автоматичСского обновлСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ Рисунок 5. ScreenShot исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рисунок 6. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΌ курсовом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»Π°ΡΡŒ со ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΎΠΉ dirent. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° построСниС Π±Π»ΠΎΠΊ-схСмы, ΠΈΠ·ΡƒΡ‡ΠΈΠ»Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ схоТСй Π·Π°Π΄Π°Ρ‡ΠΈ. Написала ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡƒΡ‚Ρ‘ΠΌ измСнСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ opendir ΠΈ readdir.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

1. Π‘ΠΎΠ³Π°Ρ‚Ρ‹Ρ€Π΅Π² А. Π₯рСстоматия ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Π‘ΠΈ Π² Unix

2. Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½ Π . ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ языков C, C++, Objective C gcc 2.7

3. Π“Ρ€Π°Π½Π½Π΅ΠΌΠ°Π½ Π‘. Linux. ΠšΠ°Ρ€ΠΌΠ°Π½Π½Ρ‹ΠΉ справочник

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ элСктронныС рСсурсы

1. http://forum.ubuntu.ru/ — Π€ΠΎΡ€ΡƒΠΌ русскоязычного сообщСства Ubuntu

2. http://www.opennet.ru/- ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ OpenNet — ΠΏΠΎΡ€Ρ‚Π°Π» ΠΏΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ ПО, Linux, BSD ΠΈ Unix систСмам

3. http://citforum.ru/operating_systems/manpages/SETJMP.3.shtmlΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Linux

4. http://linux.yaroslavl.ru/docs/prog/glibc/glibc-20.html — Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° языка C GNU glibc

5. http://ru.wikipedia.org/wiki/Setjmp.h — Бвободная энциклопСдия

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ