Portál AbcLinuxu, 10. května 2025 11:02

Dotaz: Dropbox v C

tomes.io avatar 27.11.2013 13:52 tomes.io | skóre: 12 | blog: tomesh
Dropbox v C
Přečteno: 1094×
Odpovědět | Admin
Ahoj, dostali jsme za ukol vytvorit jednoduchou implementaci Dropboxu. Klient, ktery umi monitorovat udalosti v danem adresari i podadresarich a synchronizacni server, ktery synchronizuje vsechny klienty/adresare.

Klienta uz mam, je to daemon, ktery zachycuje pomoci inotify funkci zmeny v adresarich/souborech, vytvareni/mazani soubory atd.

Ted premyslim, jak v C pomoci posix knihoven synchronizovat adresare. Jediny, co me zatim napadlo, je pri jakekoliv zmene vsechno prekopirovat/prepsat. Ale to je znacne neefektivni.

Takze muj dotaz je (abych se mel od ceho vubec odpichnout), jakych posixovych knihoven vuyzit k synchronizci adresaru? Urcite tam bude opendir() funkce atd., ale na tom zatim koncim...

Řešení dotazu:


Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.11.2013 14:55 gsnak | skóre: 22 | blog: gsnak
Rozbalit Rozbalit vše Re: Dropbox v C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebolo by lepsie pouzit rsync?
Čo Rys, to vrah!
27.11.2013 15:35 martin
Rozbalit Rozbalit vše Re: Dropbox v C
+1
tomes.io avatar 29.11.2013 13:55 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Dropbox v C
Jisteze bylo... proto jsem hned v prvni vete psal, ze jsme to dostali za ukol naimplementovat. Takze zadny rsync.

No, nejjednodussi bude proste zkratka kopirovat jednotlive soubory. pomoci inotify budu odchytavat udalosti v adresari a zmeneny soubor kopirovat.

Nicmene porad nevim, jak efektivne vyresit synchronizaci prejmenovani souboru. Bude-li mit soubor treba 2G, tak kopirovat ho do vsech adresaru by bylo dost nesikovny. Nemel by nekdo nejaky napad k tady tomuto? Napsat si specialni fci, ktera bude resit prejmenovani souboru a synchronizovat to vyuzitim nejake exec funkce?
2.12.2013 16:36 Nikola Pajkovský | skóre: 16
Rozbalit Rozbalit vše Re: Dropbox v C
struct inotify_event {
               int      wd;       /* Watch descriptor */
               uint32_t mask;     /* Mask of events */
               uint32_t cookie;   /* Unique cookie associating related
                                     events (for rename(2)) */
               uint32_t len;      /* Size of name field */
               char     name[];   /* Optional null-terminated name */
           };
cookie is a unique integer that connects related events.  Currently
       this is used only for rename events, and allows the resulting pair of
       IN_MOVED_FROM and IN_MOVED_TO events to be connected by the
       application.  For all other event types, cookie is set to 0.
hmm?
Save the whales. Feed the hungry. Free the mallocs
tomes.io avatar 9.12.2013 12:02 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Dropbox v C
Super, diky, to je vono :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.