Portál AbcLinuxu, 10. května 2025 05:46

Dotaz: C++, stat() a práva

David Watzke avatar 19.8.2006 05:53 David Watzke | skóre: 74 | blog: Blog... | Praha
C++, stat() a práva
Přečteno: 179×
Odpovědět | Admin
Proč stat("/root", &link) hodí Success přestože na ten adresář má práva 700 a spouštím to pod userem? Tohle totiž potom segfaultne
DIR* dir;
dir = opendir("/root");
struct dirent* entry;
while ((entry = readdir(dir)) != NULL) // tady, samozřejmě
	cout << entry->d_name << endl;	
Jak tomu zabránit? :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.8.2006 09:16 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: C++, stat() a práva
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože na stat() stačí execute práva na nadřazené adresáře. Možná jdi chtěl použít access(). Segfaultům zabráníš tak, že budeš kotrolovat, co ti opendir() vrací.
David Watzke avatar 19.8.2006 09:42 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: C++, stat() a práva
Díky...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 23.8.2006 05:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: C++, stat() a práva
Něco jako access(), co funguje i na adresáře by nebylo? Potřebuju něco spustit jen pokud errno == ENOENT a stat() mi přijde jako kanón na vrabce.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 23.8.2006 05:44 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: C++, stat() a práva
Aha, ono to funguje pro adresáře, akorát když to neexistuje, nenastaví errno na ENOENT jako stat(), ale vrátí -1...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
23.8.2006 11:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C++, stat() a práva
To je divné, správně by měla funkce při chybě vrátit -1 a nastavit errno odpovídajícím způsobem. Samotné nastavení errno je obecně neprůkazné (není garantováno jeho vynulování při úspěšném provedení operace).
David Watzke avatar 23.8.2006 12:27 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: C++, stat() a práva
Jak tak koukám, spíš se mi to předtím jen nějak "nepovedlo", protože teď mi to jde správně...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.8.2006 09:38 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C++, stat() a práva
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdyby to nešlo, nemohl byste udělat ani 'ls -l /'

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.