Typ pliku - struktura stat

Odpowiedz Nowy wątek
2010-12-26 11:26

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0

Mam taki kod (kawałek funkcji, która zwraca typ pliku - bardziej by chyba pasowało rodzaj, ale mniejsza o to):

struct stat buf;
stat(sciezka.c_str(), &buf);

Typ TypPliku = EMP;

if (S_ISLNK(buf.st_mode))
    TypPliku = LNK;

if (S_ISREG(buf.st_mode))
    TypPliku = REG;

if (S_ISDIR(buf.st_mode))
    TypPliku = DIR;

if (S_ISCHR(buf.st_mode))
    TypPliku = CHR;

if (S_ISBLK(buf.st_mode))
    TypPliku = BLK;

if (S_ISFIFO(buf.st_mode))
    TypPliku = FIFO;

if (S_ISSOCK(buf.st_mode))
    TypPliku = SOCK;

return TypPliku;

Chodzi o to, że ilość ifów mi się nie podoba. Jest jakiś sposób, by ją zmniejszyć? Istnieje coś takiego w stat.h?

Pozostało 580 znaków

2010-12-26 11:39

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

Tak jest sposob, elementom enum'u Typ daj wartosci takie jak maja flagi rodzaju pliku i po sprawie. Inny sposob, napisz funkcje odwzorowywujaca rodzaje na Twoj Typ.

Pozostało 580 znaków

2010-12-26 13:22

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0
t0m_k napisał(a)

Inny sposob, napisz funkcje odwzorowywujaca rodzaje na Twoj Typ.

To właśnie jest taka funkcja.

Pozostało 580 znaków

2010-12-26 13:36

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0
yoel napisał(a)

To właśnie jest taka funkcja.

Nie zrozumiales. Ten typ Typ jak sie domyslam jest zwyklym enum'em, a jak to z enum'ami bywa kazdy jego element ma przypisana wartosc, ktora reprezentuje jego nazwa. W przykladzie ktory podales uzywasz nazw elementow tego enuma. Piszac napisz funkcje odwzorowywujaca mialem bardziej na mysli napisanie czegos co zamapuje flage na wartosc typu Typ, ale jest to bez sensu rozwiazanie, poniewaz wystarczy ze przypiszesz elementom typu Typ wartosci takie jak maja flagi okreslajace rodzaj pliku.

Spojrz na to, wycinek z stat.h:

#define S_ISLNK(m)  (((m) & S_IFMT) == S_IFLNK)
#define S_ISREG(m)  (((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m)  (((m) & S_IFMT) == S_IFDIR)
#define S_ISCHR(m)  (((m) & S_IFMT) == S_IFCHR)
#define S_ISBLK(m)  (((m) & S_IFMT) == S_IFBLK)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)

To sa te funkcje sprawdzajace, czyli cos czego nie potrzebujesz, poniewaz wystarczy zrobic takie makro, oczywiscie uprzednio przydzielajac elementom Typ odpowiednie wartosci.

#define S_GETTYPE(m) ((m) & S_IFMT)

Makro obliczy Ci wartosc flagi rodzaju pliku, ktora mozesz rzutowac na element Typ i zwrocic.

edytowany 1x, ostatnio: t0m_k, 2010-12-26 13:43
Dzięki, już rozumiem. - yoel 2010-12-26 20:21

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0