2010-10-17 4 views
12

Potrzebuję zalogować użycie gniazda, i napisałem bibliotekę LD_PRELOAD.Jak sprawdzić, czy uchwyt pliku jest gniazdem?

Problem polega na tym, że nadpisuję read() i write(), niż zwykłe operacje na plikach są również rejestrowane (oczywiście).

Jak odróżnić zwykłe deskryptory plików i deskryptory gniazd?

Odpowiedz

25

Zadzwoń na fstat deskryptora i użyj makra S_ISSOCK na wyniku.

struct stat statbuf; 
fstat(fd, &statbuf); 
S_ISSOCK(statbuf.st_mode); 
+0

Świetnie! Dziękuję Ci bardzo! – netom