FUSE operace write – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

FUSE operace write – C / C++ – Fórum – Programujte.comFUSE operace write – C / C++ – Fórum – Programujte.com

 

Honza
~ Anonymní uživatel
450 příspěvků
15. 3. 2014   #1
-
0
-

Ahoj snažím se pod ubuntu vytvořit vlastní FS, ve kterém by si uživatel vytvářel a mazal složky a soubory a zapisoval do nich. Nejedná se tedy o žádný zrcadlící FS. Mám ovšem problém s operací write. Soubor otevřu a když do něj něco napíšu a chci ho následně uložit, tak se mi vytváří skrytý soubor .goutputstream-XXXXXX a objeví se mi hláška že soubor s cestou nelze najít a Zkontrolujte správnost zápisu umístění a zkuste to znovu.

Hledal jsem všude možně, ale stále nemohu přijít na to jak tuto operaci rozchodit. Nevíte někdo jak na to? Díky

static int fs_write(const char *path, const char *buf, size_t size,
		     off_t offset, struct fuse_file_info *fi)
{

	int fd;
	int res;

	(void) fi;
	printf("\n\nZapisuju do cesty: %s\n\n",path);
	fd = open(path, O_WRONLY);
	if (fd == -1){
		printf("\n\nCHYBA 1: %s\n\n",path);
		return -errno;
	}
	res = pwrite(fd, buf, size, offset);
	if (res == -1){
		printf("\n\nCHYBA 2: %s\n\n",path);
		res = -errno;
	}
	close(fd);
	return res;
}
Nahlásit jako SPAM
IP: 85.132.178.–
z
~ Anonymní uživatel
268 příspěvků
16. 3. 2014   #2
-
0
-

Před write se asi vyvolá open. Ten máš implementovaný? Jak?

Ten open, co tady voláš, je tvoje funkce, nebo ta standardní, takže ti to s touhle cestou zase vleze do toho tvého fs a pwrite zase vyvolá tvůj fs_write, který zase... do nekonečna?

Nahlásit jako SPAM
IP: 88.101.8.–
Honza
~ Anonymní uživatel
450 příspěvků
16. 3. 2014   #3
-
0
-

#2 z
funkce v metodě write jsou ty standartní....funkci fs_open naimplementovanou mám...kontroluju v ní jestli existuje cesta kterou chci otevřít a pokud ano tak vracím 0.

static int fs_open(const char *path, struct fuse_file_info *fi)
{
	if (findPath(path) == -1)
	        return -ENOENT;

	return 0;
}
Nahlásit jako SPAM
IP: 85.132.178.–
z
~ Anonymní uživatel
268 příspěvků
16. 3. 2014   #4
-
0
-

Takže to asi klekne až v tom fs_write. Nedojde k tomu zacyklení? Jaké chyby to vrací?

Nahlásit jako SPAM
IP: 88.101.8.–
Honza
~ Anonymní uživatel
450 příspěvků
16. 3. 2014   #5
-
0
-

Problém se mi podařilo částečně opravit, ale při pokusu o uložení zapsaných dat do souboru mi to celé spadne. Soubor se mi podaří otevřít tam chyba není, ale nastává u funkce pwrite(...)

int fs_write(const char* path, const char* buf, size_t size, off_t offset, struct fuse_file_info* fi)
{
	if(findPath(path) == -1)
		return -ENOENT;
	
	int fd;
	char *fPath = myfusepath(lastPath);
	fd = open(fPath, O_WRONLY);
	if (fd == -1)
		return -errno;

	
	
	int res = pwrite(fd, buf, size, offset);


	if (res == -1)
		res = -errno;
	
	close(fd);
	printf("\nWRITE SE POVEDLO\n\n");
    return size;
}
Nahlásit jako SPAM
IP: 85.132.178.–
Honza
~ Anonymní uživatel
450 příspěvků
16. 3. 2014   #6
-
0
-

Ještě jsem k tomu zjistil, že pokud chci zapsat do některého jiného souboru na disku, který není v mém FS tak se operace povede, ale nenašel jsem důvod, proč to nelze di souboru v mém FS

Nahlásit jako SPAM
IP: 85.132.178.–
z
~ Anonymní uživatel
268 příspěvků
17. 3. 2014   #7
-
0
-

Už jsem to psal. Při zápisu do souboru ve tvém FS se vyvolá ta tvá funkce fs_write. Ty v ní zapisuješ do souboru ve tvém FS, takže se zase vyvolá tvůj fs_write, který zase bude zapisovat ... a zacyklí se to až to nakonec spadne.

Nahlásit jako SPAM
IP: 78.156.159.–
Honza
~ Anonymní uživatel
450 příspěvků
17. 3. 2014   #8
-
0
-

A jakým způsobem to tedy vyřešit? Pokud chci zapsat data do souboru tak budu pokaždé volat fs_write ne?

Nahlásit jako SPAM
IP: 85.132.178.–
z
~ Anonymní uživatel
268 příspěvků
17. 3. 2014   #9
-
0
-

Já od samého začátku nevím, jak si představuješ, že by to mělo fungovat. To "zrcadlení" se ti nelíbí, ale zároveň pořád používáš souborové funkce. Vysvětli, čeho přesně chceš dosáhnout, a můžu/-eme ti poradit.

Nahlásit jako SPAM
IP: 78.156.159.–
Honza
~ Anonymní uživatel
450 příspěvků
17. 3. 2014   #10
-
0
-

chci mít FS, který bude pracovat pouze nad jednou rootovskou složkou a bude umožňovat klasické operace jako je vytváření souborů, složek, čtení souborů a zápis do nich. Tzn. např připojím adresář MujDir, a nad ním se budou všechny tyto operace provádět. A hledám způsob jak to udělat, abych si nemusel udržovat informace o obsahu souborů v paměti.

Nahlásit jako SPAM
IP: 2001:718:2:80e:c8ff:dd18:...–
z
~ Anonymní uživatel
268 příspěvků
18. 3. 2014   #11
-
0
-

A kde tedy ta data chceš ukládat?

Nahlásit jako SPAM
IP: 88.101.8.–
z
~ Anonymní uživatel
268 příspěvků
18. 3. 2014   #12
-
0
-

Respektive takhle, podstatu problému znáš - musíš myslet na to, že ten tvůj program implementuje ten FS a standardní funkce pro práci s FS (pokud je použiješ na cesty uvnitř tvého FS) se ti budou "vracet" do toho programu. To je celé.

Nahlásit jako SPAM
IP: 88.101.8.–
Honza
~ Anonymní uživatel
450 příspěvků
18. 3. 2014   #13
-
0
-

Díky za rady

Nahlásit jako SPAM
IP: 2001:718:2:80e:61a0:1fd4:...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý