Кіріспе

Unix мұрағаттау құралы

Linux Standard Base (LSB) стандартында ar құралы қолданыстан шығарылған және осы стандарттың болашақ нұсқаларында жойылуы күтілуде. Бұл шешімге себеп – "LSB бағдарламалық жасақтаманы әзірлеуге қажетті құралдарды қамтымайды, сондай-ақ o және a файл форматтарын да анықтамайды" деген түсіндірме берілді.

Файл пішімінің егжей-тегжейі

ar форматы ешқашан стандартталмаған; қазіргі заманғы архивтер екі негізгі түрі бар ортақ форматқа негізделген, BSD және System V (алғашқыда COFF деп аталған, және GNU, ELF және Windows жүйелерінде де қолданылады). Тарихи тұрғыдан V6, V7, AIX (кішкентай және үлкен) және Coherent сияқты басқа түрлер де болды, олардың барлығы ортақ форматтан едәуір өзгеше. Debian ".deb" архивтері ортақ форматты пайдаланады. ar файлы жаһандық тақырыппен басталады, одан кейін ar файлында сақталған әрбір файл үшін тақырып және дерек бөлімдері келеді. Әрбір дерек бөлімі 2 байтқа дейін тураланады. Егер ол тақ санмен аяқталса, толтыру үшін жаңа жол ('\n', 0x0A) пайдаланылады.

Файлдың қолтаңбасы

Файлдың қолтаңбасы — "!<arch>" сиқырлы ASCII жолынан және бір LF басқару символынан (0x0A) тұратын жалғыз өріс.

BSD нұсқасы

BSD ar файл атауларын ASCII бос орындарымен оң жақтан толтырып сақтайды. Бұл файл атауларындағы бос орындарға қатысты мәселелер тудырады. 4.4BSD ar кеңейтілген файл атауларын файл атауы өрісіне "#1/" жолын және файл атауының ұзындығын қосып, дерек бөлімінің алдына нақты файл атауын сақтайды. Ол сондай-ақ SYMDEF деп аталатын архитектураға тән файлды архивтің бірінші мүшесі ретінде қосады. Кейбір туыстас жүйелер реттелген нұсқа екенін көрсету үшін атаудан кейін бос орын мен "СОРТИРЛАНҒАН" деген жазуды қояды. Darwin жүйесінде 64 биттік нұсқасы бар. POSIX ranlib-ті алмастыру ретінде опцияны енгізгенімен, BSD ar-дың жаңа нұсқалары осы мүмкіндікті қолдау үшін қайта жазылды. FreeBSD, әсіресе, SYMDEF кесте форматынан бас тартып, System V стиліндегі кестеге көшті.

V жүйе (немесе GNU) нұсқасы

System V ar жүйесі файл атауының соңындағы "/" таңбасын (0x2F) пайдаланады; бұл кеңейтілген файл атауын қолданбай-ақ кеңістіктерді пайдалануға мүмкіндік береді. Содан кейін ол "//" деген атаумен файлдың дерек бөлімінде бірнеше кеңейтілген файл атауын сақтайды, ал осы жазбаға болашақ тақырыптар сілтеме жасайды. Тақырып кеңейтілген файл атауына "/" таңбасын сақтау арқылы және содан кейін кеңейтілген файл атаулары бөліміндегі файл атауының басына қарай ондық смещение санын қосу арқылы сілтеме жасайды. Бұл "//" файлының форматы – бір немесе бірнеше LF таңбаларымен бөлінген ұзын файл атауларының тізімі ғана. Ондық смещениелер – "//" файлындағы жол немесе жолдар емес, таңбалар саны. Бұл әдетте символдар кестесінен кейін файлдың екінші жазбасы болып табылады, ал символдар кестесі әрқашан бірінші болады. System V ar арнайы файл атауын "/" пайдаланады, бұл келесі деректерде символдарды іздеу кестесі бар екенін көрсетеді, ол ar кітапханаларында қол жеткізу жылдамдығын арттыру үшін қолданылады. Бұл символдар кестесі үш бөліктен тұрады, олар бір-бірімен байланысқан деректер ретінде жазылады. Кестедегі жазбалар санын көрсететін 32 биттік үлкен ендиан бүтін саны. 32 биттік үлкен ендиан бүтін сандарының жиынтығы. Әрбір символ үшін біреу, осы символды қамтитын файлдың бас тақырыбының мұрағаттағы орнын жазады. Нөлмен аяқталатын жолдар жиынтығы. Әрқайсысы символдың атауы және 2-бөлімдегі орналасулар тізімімен бірдей ретпен келеді. Кейбір System V жүйелері символдарды іздеу кестесі үшін жоғарыда сипатталған форматты қолданбайды. Мысалы, HP UX 11.0 операциялық жүйелері үшін бұл ақпарат SOM файл форматына негізделген дерек құрылымында сақталады. "/" арнайы файлы нақты тізбекпен аяқталмайды; соңғы символдың атауы оқылғаннан кейін аяқталды деп есептеледі. 4 Гигабайт файл мөлшері шегінен асып кету үшін Solaris 11.2 және GNU сияқты кейбір операциялық жүйелер өзгертілген іздеу кестесін пайдаланады. Символдарды іздеу кестелерінде 32 биттік бүтін сандардың орнына 64 биттік бүтін сандар қолданылады. Осы кесте үшін идентификатор ретінде "/" орнына "/SYM64/" тізбегі қолданылады.

Windows нұсқасы

Windows (PE/COFF) нұсқасы SysV/GNU нұсқасына негізделген. Бірінші жазба "/" SysV/GNU символдар кестесімен ұқсас құрылымға ие. Екінші жазба да "/" болып табылады, бұл Microsoft кеңейтімі, ол кеңейтілген символдардың өзара сілтеме кестесін сақтайды. Бұл кесте реттелген және кішкентай эндиан бүтін сандарын қолданады. Үшінші жазба – SysV/GNU-дағыдай, "//" ұзын атау деректерінен тұрады.

Архивтің кішігірім түрі

GNU binutils және Elfutils нұсқаларында сиқырлы саны бар қосымша "жұқа архив" форматы бар. Жұқа архивте тек символдар кестесі және файлға сілтемелер ғана болады. Файл форматы негізінен System V форматындағы архив болып табылады, онда әрбір файл дерек бөлімдерінсіз сақталады. Әрбір файл атауы "ұзын" атау ретінде сақталады және олар символдық сілтемелердей қарастырылады.