{"id":37019,"date":"2019-10-31T22:15:20","date_gmt":"2019-10-31T19:15:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sistema-udalennogo-fajlovogo-dostupa-cage\/"},"modified":"2019-10-31T22:15:20","modified_gmt":"2019-10-31T19:15:20","slug":"sistema-udalennogo-fajlovogo-dostupa-cage","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","title":{"rendered":"Sistemi i aksesit t\u00eb larg\u00ebt t\u00eb skedar\u00ebve Cage","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Q\u00ebllimi i sistemit<\/h3>\n<p><\/p>\n<p>Mb\u00ebshtetje p\u00ebr aksesin e larg\u00ebt n\u00eb skedar\u00ebt n\u00eb kompjuter\u00ebt n\u00eb rrjet. Sistemi \"virtualisht\" mb\u00ebshtet t\u00eb gjitha operacionet kryesore t\u00eb skedar\u00ebve (krijimi, fshirja, leximi, shkrimi etj.) p\u00ebrmes shk\u00ebmbimit t\u00eb transaksioneve (mesazheve) p\u00ebrmes protokollit TCP.<\/p>\n<p><\/p>\n<h3>Fushat e aplikimit<\/h3>\n<p><\/p>\n<p>Funksionaliteti i sistemit \u00ebsht\u00eb efikas n\u00eb rastet e m\u00ebposhtme:<\/p>\n<ul>\n<li> n\u00eb aplikacionet nativ p\u00ebr pajisje mobile dhe embedded (smartphone, sisteme t\u00eb menaxhimit t\u00eb bordit etj.), q\u00eb k\u00ebrkojn\u00eb qasje t\u00eb shpejt\u00eb n\u00eb skedar\u00ebt n\u00eb serverat e larg\u00ebt n\u00eb kushte t\u00eb prirjes p\u00ebr nd\u00ebrprerje t\u00eb mundshme t\u00eb lidhjes (duke u shk\u00ebputur n\u00eb offline);<\/li>\n<li> n\u00eb TDB t\u00eb ngarkuara, n\u00ebse p\u00ebrpunimi i k\u00ebrkesave b\u00ebhet n\u00eb servera t\u00eb nj\u00ebjt\u00eb, nd\u00ebrsa ruajtja e t\u00eb dh\u00ebnave - n\u00eb t\u00eb tjer\u00eb;<\/li>\n<li> n\u00eb rrjetet korporate t\u00eb shp\u00ebrndara p\u00ebr mbledhjen dhe p\u00ebrpunimin e informacioneve, q\u00eb k\u00ebrkojn\u00eb shpejt\u00ebsi t\u00eb lart\u00eb n\u00eb shk\u00ebmbimin e t\u00eb dh\u00ebnave, rezervimin dhe besueshm\u00ebrin\u00eb;<\/li>\n<li> n\u00eb sisteme komplekse me arkitektur\u00eb mikrosh\u00ebrbimi, ku vonesat n\u00eb shk\u00ebmbimin e informacionit midis moduleve kan\u00eb nj\u00eb r\u00ebnd\u00ebsi kritikisht t\u00eb madhe.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h3>Struktura<\/h3>\n<p><\/p>\n<p>Sistemi Cage (ka nj\u00eb implementim - beta-version n\u00eb Python 3.7 n\u00eb sistemin operativ Windows) p\u00ebrfshin dy pjes\u00eb kryesore: <\/p>\n<ol>\n<li> <b>Cageserver<\/b> \u2014 programi i serverit t\u00eb skedar\u00ebve (paketa e funksioneve) q\u00eb aktivizohet n\u00eb kompjuter\u00ebt n\u00eb rrjet, t\u00eb cil\u00ebve u nevojitet qasje e larg\u00ebt n\u00eb skedar\u00eb;<\/li>\n<li> klasa <b>Cage<\/b> me nj\u00eb bibliotek\u00eb metodash p\u00ebr softuerin klient, q\u00eb thjeshton kodimin e nd\u00ebrveprimit me server\u00ebt.<\/li>\n<\/ol>\n<p><\/p>\n<h3>P\u00ebrdorimi i sistemit n\u00eb an\u00ebn e klient\u00ebve<\/h3>\n<p><\/p>\n<p>Metodat e klas\u00ebs Cage z\u00ebvend\u00ebsojn\u00eb operacionet \"rutinale\" t\u00eb zakonshme t\u00eb sistemit t\u00eb skedar\u00ebve: <i>kreu, hapja, mbyllja, fshirja <\/i>e skedar\u00ebve, si dhe <i>leximin\/shkrimin e t\u00eb dh\u00ebnave n\u00eb format binar<\/i> (me p\u00ebrcaktimin e pozicionit dhe madh\u00ebsis\u00eb s\u00eb t\u00eb dh\u00ebnave). Konceptualisht k\u00ebto metoda jan\u00eb t\u00eb af\u00ebrta me funksionet e skedar\u00ebve t\u00eb gjuh\u00ebs C, ku apertura\/mbyllja e skedar\u00ebve b\u00ebhet \"n\u00eb kanalet\" e hyrjes dhe daljes. <\/p>\n<p><\/p>\n<p>Me fjal\u00eb t\u00eb tjera, programuesi punon jo me metodat e objekteve \"skedare\" (klasa <b>_io<\/b> n\u00eb Python), por me metodat e klas\u00ebs Cage.<\/p>\n<p><\/p>\n<p>Kur krijohet nj\u00eb instanc\u00eb e objektit Cage, ai vendos lidhjen fillestare me serverin (ose me disa server\u00eb), kalon autorizimin me Id e klientit dhe merr nj\u00eb konfirmim me numrin e portit t\u00eb dedikuar p\u00ebr t\u00eb kryer t\u00eb gjitha operacionet e skedar\u00ebve. Kur objekti Cage fshihet, ai i jep serverit nj\u00eb urdh\u00ebr p\u00ebr t\u00eb nd\u00ebrprer\u00eb lidhjen dhe p\u00ebr t\u00eb mbyllur skedar\u00ebt. Nd\u00ebrprerja e lidhjes mund t\u00eb inicirohet edhe nga vet\u00eb server\u00ebt.<\/p>\n<p><\/p>\n<p>Sistemi rrit shpejt\u00ebsin\u00eb e leximit\/shkrimit duke u bazuar n\u00eb buffers t\u00eb fragmenteve t\u00eb skedar\u00ebve q\u00eb p\u00ebrdoren shpesh nga programet klient n\u00eb memorie (buffer) RAM.<br \/>\nProgrami klient mund t\u00eb p\u00ebrdor\u00eb \u00e7do num\u00ebr objektesh Cage me cil\u00ebsime t\u00eb ndryshme (kapaciteti i memories bufer, madh\u00ebsia e bllokut gjat\u00eb shk\u00ebmbimit me serverin etj.). <\/p>\n<p><\/p>\n<p>Nj\u00eb objekt Cage mund t\u00eb shk\u00ebmbej\u00eb t\u00eb dh\u00ebna me disa skedar\u00eb n\u00eb disa server\u00eb. Parametrat p\u00ebr lidhjen (adresem IP ose DNS serveri, porta kryesore p\u00ebr autorizimin, rruga dhe emri i skedarit) vendosen gjat\u00eb krijimit t\u00eb objektit.<\/p>\n<p><\/p>\n<p>Duke qen\u00eb se \u00e7do objekt Cage mund t\u00eb punoj\u00eb gjithashtu me shum\u00eb skedar\u00eb, p\u00ebr buferizimin p\u00ebrdoret nj\u00eb hap\u00ebsir\u00eb e p\u00ebrbashk\u00ebt e memories. Madh\u00ebsia e caches \u2013 numri i faqeve dhe madh\u00ebsia e tyre, caktohet dinamikisht gjat\u00eb krijimit t\u00eb objektit Cage. P\u00ebr shembull, nj\u00eb cache prej 1 GB \u00ebsht\u00eb 1000 faqe me nga 1 MB, ose 10,000 faqe me nga 100 KB, ose 1 milion faqe me nga 1 KB. Zgjedhja e madh\u00ebsis\u00eb dhe numrit t\u00eb faqeve \u00ebsht\u00eb nj\u00eb detyr\u00eb specifike p\u00ebr \u00e7do rast aplikativ.<\/p>\n<p><\/p>\n<p>Mund t\u00eb p\u00ebrdoren nj\u00ebkoh\u00ebsisht disa objekte Cage, p\u00ebr t\u00eb p\u00ebrcaktuar cil\u00ebsime t\u00eb ndryshme t\u00eb memories bufer n\u00eb var\u00ebsi t\u00eb karakteristikave t\u00eb aksesit n\u00eb informacion n\u00eb skedar\u00eb t\u00eb ndrysh\u00ebm. Si baz\u00eb p\u00ebrdoret algoritmi m\u00eb i thjesht\u00eb i buferizimit: pas shterimit t\u00eb sasis\u00eb s\u00eb caktuar t\u00eb memories, faqet e reja z\u00ebvend\u00ebsojn\u00eb ato t\u00eb vjetra sipas parimit t\u00eb p\u00ebrjashtimit me numrin minimal t\u00eb aksesimeve. Buferizimi \u00ebsht\u00eb ve\u00e7an\u00ebrisht i efektsh\u00ebm n\u00eb rastin e aksesit t\u00eb pand\u00ebrprer\u00eb (n\u00eb kuptimin statistik) nga ana e ndryshme e skedar\u00ebve dhe, nga ana tjet\u00ebr, e fragmenteve t\u00eb \u00e7do skedari. <\/p>\n<p><\/p>\n<p>Klasa Cage mb\u00ebshtet hyrjen\/daljen jo vet\u00ebm p\u00ebr adresat e t\u00eb dh\u00ebnave (me p\u00ebrcaktimin e pozicionit dhe gjat\u00ebsi t\u00eb mas\u00ebs, \"duke z\u00ebvend\u00ebsuar\" operacionet e sistemit t\u00eb skedar\u00ebve), por edhe n\u00eb nj\u00eb nivel m\u00eb t\u00eb ul\u00ebt, \"fisik\" \u2014 p\u00ebrmes numrave t\u00eb faqeve n\u00eb memorien bufer. <\/p>\n<p><\/p>\n<p>P\u00ebr objektet Cage mb\u00ebshtetet funksioni origjinal <i>\"hibernimi\"<\/i> (\u00absna\u00bb) \u2013 ato mund t\u00eb \u00abmb\u00ebshtillen\u00bb (p.sh., n\u00eb rastin e nd\u00ebrprerjes s\u00eb lidhjes me serverat, ose kur aplikacioni ndalet etj.) n\u00eb nj\u00eb skedar dump lokal nga ana e klientit dhe shpejt t\u00eb rikuperohen nga ky skedar (pas rinovimit t\u00eb lidhjes, kur aplikacioni radohidhet). Kjo ofron mund\u00ebsin\u00eb e reduktimit t\u00eb r\u00ebnd\u00ebsish\u00ebm t\u00eb trafik\u00ebve kur aktivizohet puna e programit t\u00eb klientit pas nj\u00eb pushimi t\u00eb p\u00ebrkohsh\u00ebm \u00aboffline\u00bb, duke qen\u00eb se segmentet e shpeshta t\u00eb skedar\u00ebve tashm\u00eb do t\u00eb jen\u00eb n\u00eb cache.<\/p>\n<p><\/p>\n<p>Cage \u2014 jan\u00eb rreth 3600 rreshta kodi.<\/p>\n<p><\/p>\n<h3>Principet e nd\u00ebrtimit t\u00eb server\u00ebve<\/h3>\n<p><\/p>\n<p>Skedar-server\u00ebt Cageserver mund t\u00eb nisen me nj\u00eb num\u00ebr t\u00eb rast\u00ebsish\u00ebm portesh, nj\u00eb prej t\u00eb cilave (\u00abn\u00ebnt\u00eb\u00bb), p\u00ebrdoret vet\u00ebm p\u00ebr autorizimin e t\u00eb gjith\u00eb klient\u00ebve, nd\u00ebrsa t\u00eb tjerat \u2014 p\u00ebr shk\u00ebmbimin e t\u00eb dh\u00ebnave. P\u00ebr programin e serverit Cage nevojitet vet\u00ebm Python. N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, kompjuteri me serverin e skedar\u00ebve mund t\u00eb kryej\u00eb \u00e7do pun\u00eb tjet\u00ebr. <\/p>\n<p><\/p>\n<p>Serveri nishet n\u00eb fillim si nj\u00eb grup dy procesesh kryesore:<\/p>\n<ol>\n<li><b>\u00abLidhjet\u00bb<\/b> \u2013 procesi p\u00ebr t\u00eb kryer operacione lidhjeje me klient\u00ebt dhe p\u00ebr ta nd\u00ebrprer\u00eb at\u00eb me iniciativ\u00ebn e serverit;<\/li>\n<li><b>\u00abOperacione\u00bb<\/b> \u2013 procesi p\u00ebr t\u00eb kryer detyra (operacione) t\u00eb klient\u00ebve p\u00ebr pun\u00ebn me skedar\u00ebt, si dhe p\u00ebr t\u00eb mbyllur seancat e lidhjes sipas komandave t\u00eb klient\u00ebve.<\/li>\n<\/ol>\n<p><\/p>\n<p>T\u00eb dy proceset nuk jan\u00eb t\u00eb sinkronizuara dhe organizohen si cikle t\u00eb pafundme t\u00eb pranimit dhe d\u00ebrgimit t\u00eb mesazheve mbi baz\u00ebn e radh\u00ebve multi-proces, objekteve proxy, bllokimeve dhe socket-eve.<br \/>\nProcesi \u00abLidhjes\u00bb ndan nj\u00eb port p\u00ebr pranimin dhe d\u00ebrgimin e t\u00eb dh\u00ebnave p\u00ebr secilin klient. Numri i porteve p\u00ebrcaktohet n\u00eb fillim t\u00eb serverit. P\u00ebrputhshm\u00ebria midis porteve dhe klient\u00ebve ruhet n\u00eb memorien proxy t\u00eb ndar\u00eb nd\u00ebrmjet proceseve.<\/p>\n<p><\/p>\n<p>Procesi \u00abOperacione\u00bb mb\u00ebshtet ndarjen e burimeve skedare, kurse disa klient\u00eb t\u00eb ndrysh\u00ebm mund t\u00eb lexojn\u00eb s\u00eb bashku (<i>kvasiparalelisht<\/i>, pasi qasja menaxhohet nga bllokimet) t\u00eb dh\u00ebna nga nj\u00eb skedar, n\u00ebse kjo \u00ebsht\u00eb lejuar gjat\u00eb hapjes fillestare nga \u00abklienti\u00bb i par\u00eb. \n<\/p>\n<p>Punimi i komandave p\u00ebr krijimin\/zhbllokimin\/hapjen\/mbylljen e skedar\u00ebve <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/dts-dronten\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2497\">server<\/a> kryhet n\u00eb vet\u00eb procesin e \u00abOperacioneve\u00bb n\u00eb m\u00ebnyr\u00eb t\u00eb rrept\u00eb, duke p\u00ebrdorur sistemin e skedar\u00ebve t\u00eb OS-t\u00eb s\u00eb serverit.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb p\u00ebrshpejtuar leximin\/shkrimin, k\u00ebto operacione kryhen n\u00eb thread-e q\u00eb krijohen nga procesi \"Operacione\". Numri i thread-eve \u00ebsht\u00eb zakonisht i barabart\u00eb me numrin e skedar\u00ebve t\u00eb hapur. Detyrat p\u00ebr lexim\/shkrim nga klient\u00ebt dor\u00ebzohen n\u00eb nj\u00eb radh\u00eb t\u00eb p\u00ebrbashk\u00ebt dhe thread-i i par\u00eb q\u00eb \u00e7lirohet merr detyr\u00ebn nga fillimi i saj. Logjika e ve\u00e7ant\u00eb lejon p\u00ebrjashtimin e operacioneve t\u00eb rimarrjes s\u00eb t\u00eb dh\u00ebnave n\u00eb memorien e p\u00ebrhershme t\u00eb serverit.<\/p>\n<p><\/p>\n<p>Procesi \"Operacione\" ndjek aktivitetin e klient\u00ebve dhe ndalon sh\u00ebrbimin e tyre si sipas urdhrave t\u00eb tyre, ashtu edhe kur kalon koha e pritjes p\u00ebr pasivitet.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb siguruar besueshm\u00ebrin\u00eb, Cageserver mban ditar\u00eb t\u00eb t\u00eb gjitha transaksioneve. Nj\u00eb ditar i p\u00ebrbashk\u00ebt p\u00ebrmban kopje t\u00eb mesazheve nga klient\u00ebt me detyrat p\u00ebr krijimin\/ hapjen\/ rinovimin\/ fshirjen e skedar\u00ebve. P\u00ebr \u00e7do skedar n\u00eb pun\u00eb krijohet nj\u00eb ditar i ve\u00e7ant\u00eb, n\u00eb t\u00eb cilin regjistrohen kopjet e mesazheve me detyrat p\u00ebr lexim dhe shkrim t\u00eb t\u00eb dh\u00ebnave n\u00eb k\u00ebt\u00eb skedar, si dhe masat e t\u00eb dh\u00ebnave q\u00eb jan\u00eb shkruar (t\u00eb reja) dhe masat e t\u00eb dh\u00ebnave q\u00eb jan\u00eb shkat\u00ebrruar gjat\u00eb rimarrjes (shkrimit t\u00eb t\u00eb dh\u00ebnave t\u00eb reja \"n\u00eb sip\u00ebr t\u00eb\" atyre t\u00eb vjetra). <\/p>\n<p><\/p>\n<p>K\u00ebta ditar\u00eb ofrojn\u00eb mund\u00ebsin\u00eb p\u00ebr restaurimin e ndryshimeve t\u00eb reja n\u00eb kopje rezerv\u00eb si dhe p\u00ebr \"rikthimin\" nga p\u00ebrmbajtja aktuale n\u00eb nj\u00eb moment t\u00eb caktuar n\u00eb t\u00eb kaluar\u00ebn. <\/p>\n<p><\/p>\n<p>Cageserver ka rreth 3100 rreshta kodi.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Sistemi i aksesit t\u00eb larg\u00ebt t\u00eb skedar\u00ebve Cage\" src=\"\/wp-content\/uploads\/2019\/08\/606d593347d73274b0c172dae34da0d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Fillimi i programit t\u00eb serverit t\u00eb skedar\u00ebve Cageserver<\/h3>\n<p><\/p>\n<p>Gjithashtu, gjat\u00eb fillimit n\u00eb dialog duhet t\u00eb p\u00ebrcaktohet:<br \/>\n \u2014 porta kryesore p\u00ebr autorizim;<br \/>\n \u2014 numri i porteve p\u00ebr shk\u00ebmbimin e transaksioneve me klient\u00ebt e autorizuar (nga 1 dhe m\u00eb shum\u00eb, grupi numrave fillon nga numri pas numrit kryesor t\u00eb port\u00ebs).<\/p>\n<p><\/p>\n<h3>P\u00ebrdorimi i klas\u00ebs Cage<\/h3>\n<p><\/p>\n<p><b>class<\/b> cage.<b>Cage<\/b>( <i>cage_name=\u00bb, pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=\u00bb<\/i> )<\/p>\n<p><\/p>\n<p>Nga kjo klas\u00eb krijohen objekte, t\u00eb cilat kryejn\u00eb nd\u00ebrveprimin me server\u00ebt e skedar\u00ebve dhe p\u00ebrmbajn\u00eb memorien bufer.<\/p>\n<p><\/p>\n<p><b><u>Parametrat<\/u><\/b><\/p>\n<p><\/p>\n<ul>\n<li> <b>cage_name<\/b>(<i>str<\/i>) \u2014 emri i kusht\u00ebzuar i objektit, i cili p\u00ebrdoret gjat\u00eb identifikimit t\u00eb klient\u00ebve n\u00eb an\u00ebn e serverit <\/li>\n<li> <b>pagesize<\/b>(<i>int<\/i>) \u2014 madh\u00ebsia e nj\u00eb faqe t\u00eb memories bufer (n\u00eb byte)<\/li>\n<li> <b>numpages<\/b>(<i>int<\/i>) \u2014 numri i faqeve t\u00eb memories bufer<\/li>\n<li> <b>maxstrlen<\/b>(<i>int<\/i>) \u2014 maksimalja e gjat\u00ebsi s\u00eb vargut n\u00eb operacionet e shkrimit dhe leximit<\/li>\n<li> <b>server_ip<\/b>(<i>dict<\/i>) \u2014 nj\u00eb fjalor me adresat e p\u00ebrdorura <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/\"   title=\"server\u00ebsh\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1347\">server\u00ebsh<\/a>, ku \u00e7el\u00ebsi \u00ebsht\u00eb emri kushtor i serverit (id e serverit brenda aplikacionit), dhe vlera \u00ebsht\u00eb nj\u00eb string me adres\u00ebn: \u201cip address:port\u201d ose \u201cDNS:port\u201d (p\u00ebrputhja e emrave me adresat reale \u00ebsht\u00eb p\u00ebrkohshme, mund t\u00eb ndryshohet)<\/li>\n<li> <b>prisni<\/b>(<i>int<\/i>) \u2014 koha e pritjes p\u00ebr p\u00ebrgjigje nga serveri gjat\u00eb marrjes s\u00eb porteve (n\u00eb sek.)<\/li>\n<li> <b>zgjohem<\/b>(<i>boolean<\/i>) \u2014 flamuri i m\u00ebnyr\u00ebs s\u00eb krijimit t\u00eb objektit (<i>False<\/i> \u2014 n\u00ebse krijohet nj\u00eb objekt i ri, <i>E v\u00ebrtet\u00eb<\/i> \u2014 n\u00ebse objekti krijohet nga nj\u00eb \u2018hibernuar\u2019 m\u00eb par\u00eb \u2014 duke aplikuar operacionin \u2018hibernimi\u2019, p\u00ebr nga e drejta False)<\/li>\n<li> <b>cache_file<\/b>(<i>str<\/i>) \u2014 emri i skedarit p\u00ebr hibernimin<\/li>\n<\/ul>\n<p><\/p>\n<p><b><u>Metodat<\/u><\/b><\/p>\n<p><\/p>\n<p>Kapsula.<b>file_create<\/b>( <i>server, rruga<\/i> ) \u2013 krijo nj\u00eb skedar t\u00eb ri<\/p>\n<p><\/p>\n<p>Kapsula.<b>file_rename<\/b>( <i>server, rruga, emri_i_ridhen<\/i> ) \u2013 ndrysho emrin e skedarit<\/p>\n<p><\/p>\n<p>Kapsula.<b>file_remove<\/b>( <i>server, rruga<\/i>) \u2013 fshi skedarin<\/p>\n<p><\/p>\n<p>Kapsula.<b>open<\/b>( <i>server, rruga, mod <\/i>) \u2013 hap skedarin<\/p>\n<p><\/p>\n<p>Kthen <i>fchannel<\/i> numri i kanalit. Parametri <i>mod<\/i> \u2014 ky \u00ebsht\u00eb regjimi i hapjes s\u00eb skedarit: \u2018wm\u2019 \u2014 monopol (lexim\/shkrim), \u2018rs\u2019 \u2014 vet\u00ebm leximi, dhe e ndar\u00eb vet\u00ebm p\u00ebr lexim nga klient\u00ebt e tjer\u00eb, \u2018ws\u2019 \u2014 lexim\/shkrim, dhe e ndar\u00eb vet\u00ebm p\u00ebr lexim nga klient\u00ebt e tjer\u00eb. <\/p>\n<p><\/p>\n<p>Kapsula.<b>close<\/b> (<i>fchannel<\/i>) \u2013 mbyll skedarin<\/p>\n<p><\/p>\n<p>Kapsula.<b>write <\/b>(<i>fchannel, fillim, t\u00eb dh\u00ebna <\/i>) \u2013 shkruaj nj\u00eb varg byte n\u00eb skedar<\/p>\n<p><\/p>\n<p>Kapsula.<b>read <\/b>(<i>fchannel, fillim, len_data<\/i> ) \u2013 lexoj nj\u00eb varg byte nga skedari<\/p>\n<p><\/p>\n<p>Kapsula.<b>put_pages <\/b>( <i>fchannel<\/i> ) \u2013 \u2018shtyn\u2019 nga buffer n\u00eb server t\u00eb gjitha faqet e kanalit t\u00eb specifikuar, q\u00eb jan\u00eb modifikuar. P\u00ebrdoret n\u00eb pikat e algoritmit, kur duhet t\u00eb jemi t\u00eb sigurt se t\u00eb gjitha operacionet n\u00eb kanal jan\u00eb ruajtur fizikisht n\u00eb skedar n\u00eb server.<\/p>\n<p><\/p>\n<p>Kapsula.<b>push_all<\/b> () \u2013 \u2018shtyn\u2019 nga buffer n\u00eb server t\u00eb gjitha faqet e t\u00eb gjitha kanaleve p\u00ebr instanc\u00ebn e klas\u00ebs Cage, q\u00eb jan\u00eb modifikuar. P\u00ebrdoret kur duhet t\u00eb jemi t\u00eb sigurt se t\u00eb gjitha operacionet n\u00eb t\u00eb gjitha kanalet jan\u00eb ruajtur n\u00eb server.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463085\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u00bb \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0434\u0440.) \u043f\u0443\u0442\u0451\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438) \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0422\u0421\u0420. \u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 embedded \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u0431\u043e\u0440\u0442\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u043f.), \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27748,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37019","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sistemi i aksesit t\u00eb skedar\u00ebve n\u00eb distanc\u00eb Cage | ProHoster","description":"Q\u00ebllimi i sistemit Mb\u00ebshtetje p\u00ebr aksesin n\u00eb distanc\u00eb t\u00eb skedar\u00ebve n\u00eb kompjuter\u00ebt n\u00eb rrjet.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster","og:description":"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:20+00:00","article:modified_time":"2019-10-31T19:15:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37019","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 21:52:49","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:34:26","updated":"2026-02-09 21:52:49","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=37019"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37019\/revisions"}],"predecessor-version":[{"id":159779,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37019\/revisions\/159779"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/27748"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}