Пета задача

  1. За fs.remove('/') ми се иска да кажа kernel panic :D Приемете, че потребителя трябва да е достатъчно умен, за да не прави такива опити.

    Монтирането на друга файлова система не изисква ресурс, отвъд единия байт за директорията, в която ще бъде монтирана. Самата монтирана файлова система си има собствени ресурси, независими от тези на системата, в която бива монтирана.

  2. @Eвгени, щом двете файлови системи имат независими ресурси, предполагам, че ако имаме файлова система fs2 монтирана към файлова система fs1, на да кажем следния път '/alabala/fs2', то НЕ може да правим меки и твърди връзки между обекти от fs1 и fs2 т.е. например израза link('/some_file','/alabala/fs2/other_file', symbolic=False) трябва да ни хвърля грешка. Правилно ли разбирам?

  3. @Станислав, когато изтриеш директорията, например, dir и се опиташ да достъпиш нещо от нея трябва да напишеш '/.../dir/...' т.е. трябва да минеш през нея, но тогава get_node ще ти даде NodeDoesNotExistError т.е. за файловата ти система (и за меките и твърдите връзки) всичко в dir и нататък би трябвало да е умряло. Понеже ми се струва, че искаш да триеш съдържанието на dir покомпонентно, то ще отбележа, че за да изтриеш папката от гледна точка на файловата ти система е достатъчно да я махнеш от nodes и directories на предхождащата я папка. Ако искаш да я махнеш въобще от паметта на компютъра трябва да направиш така, че нищо да не сочи към нея (reference count-a да стане 0 и garbage collector- а ще я махне). Ако пък искаш съвсем всичко в dir и нататък съвсем да го премахнеш от компютъра тогава трябва да се подсигуриш, че нищо не сочи към някой от въпросните обекти (т.е. да махнеш и меките връзки) или пък ако нещо1 сочи към нещозаизтриване от въпросните обекти, то нищо не сочи към нещо1, и тогава garbage collectora ще ги ликвидира. (Е, това е така ако съм разбрал нещата, крайно време е някой да ме научи ако греша :P)

  4. Ако във файловата система остават например 2 байта и на даден файл извикаме метода append() с низ по-голям от два символа, каква трябва да бъде реакцията на програмата?

    Друг въпрос. Могат ли да се правят връзки от една файлова система към друга, ако втората е монтирана?

  5. Здравейте! Съжалявам за неуместният въпрос, но дали ще бъде възможно да ни бъде изместен крайният срок за 5-тото домашното с 2-3 дни примерно, защото в близката седмица имахме доста контролни, (а и хакатона беше през уикенда) и не ни остана време да отделим нужното внимание на домашното, а то наистина изглежда интересно и си изисква необходимото внимание и време? :)

  6. Последните 5 примера преди връзки също имат нужда от малко промяна. Следната върши работа:

    >>> file_system.create('/home/evstati/suchki.mp3', content='suchki')
    >>> suchki = file_system.get_node('/home/evstati/suchki.mp3')
    >>> file_system.create('/home/music', directory=True)
    >>> file_system.move('/home/evstati/suchki.mp3', '/home/music')
    >>> suchki.content is file_system.get_node('/home/music/suchki.mp3').content
    True
    >>> suchki is file_system.get_node('/home/music/suchki.mp3')
    True
    >>> file_system.get_node('/home/evstati/suchki.mp3')
    path does not exist
    
  7. Какви ексепшъни се очаква да възбуждаме (ala Kanev style), когато пътя към destination на връзката не съществува? И когато вече съществува друг файл. Съдейки по другите методи ще да са DestinationNodeDoesNotExistError и DestinationNodeExistsError, което изглежда странно, защото 2та метода звучат сякаш покриват всички случаи.

    EDIT: Очаква ли се да handle-ваме по някакъв разумен начин рекурсивни символични линкове?

  8. @Цветан Коев, мисля, че когато се опитваме да добавим още съдържание към съществуващ файл, то трябва файловата ни система да връща NotEnoughSpaceError.

    Въпрос - files, directories и nodes на директориите са методи или атрибути, защото има два одобрени отговора на @Екатерина и на @Илиян, а в същото време в условието са атрибути.

    Също подкрепям идеята на @Цветан за срока на домашното :)

Трябва да сте влезли в системата, за да може да отговаряте на теми.