• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Polecenie ls -la pisane w C - zamiana identyfikatora grupy, na nazwę

Object Storage Arubacloud
0 głosów
296 wizyt
pytanie zadane 17 października 2020 w C i C++ przez Daim123 Użytkownik (530 p.)

Cześć chciałbym napisać naiwnie ls -al, znalazłem kod w internecie: 

https://github.com/youngsterxyf/Coder-s-code/blob/master/CC%2B%2B/ls.c

Ale nie rozumiem pewnego fragmentu kodu: 

#include<pwd.h>

char *uid_to_name(uid_t uid) <---- nie rozumiem dlaczego stosujemy tutaj wskaźnik na funkcję
/*
 * returns pointer to username associated with uid, uses getpw()
 * 
 * */
{
	struct passwd *getpwuid(), *pw_ptr;
	static char numstr[10];

	if((pw_ptr = getpwuid(uid)) == NULL){
		sprintf(numstr, "%d", uid); 
		return numstr;  <----- i nie rozumiem co dzieje się tu w przypadku błędu i tej jednej linijki wyżej też 
	}
	else
		return pw_ptr->pw_name;
}

 

1 odpowiedź

+1 głos
odpowiedź 17 października 2020 przez Oscar Nałogowiec (29,290 p.)

To nie jest wskaźnik na funkcję. To jest funkcja zwracająca char * (napis w stylu C). Wskaźnik na funkcję to byłby

char (*uid_to_name)(uid_t uid)

Podana funkcja w przypadku błędu zwraca napis zawierający liczbę - userid.

W systemie mogą istnieć pliki, których właściciel już nie ma konta, więc mogą istnieć userid bez przyporządkowania nazwy.

Ważna uwaga - funkcja zwraca wskaźnik na statyczną zmienną, następne wywołanie nadpisze wynik. Trzeba go użyć albo skopiować.

 

komentarz 17 października 2020 przez Daim123 Użytkownik (530 p.)
Oki, czyli jest to po prostu zwykła funkcja i bez tej gwiazdki by nie działała ?
komentarz 17 października 2020 przez Oscar Nałogowiec (29,290 p.)

Bez gwiazdki w char * zwracała by pojedynczy znak.

komentarz 17 października 2020 przez Daim123 Użytkownik (530 p.)
A czy ma to jakąś konkretną nazwę żebym mógł sobie o tym poczytać?
komentarz 18 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
Konkretna nazwa? Przecież to po prostu typ funkcji. Skoro jest typu char*, to zwraca wskaźnik na łańcuch, jeśli byłaby innego typu, to zwracałaby inny typ. Jak chcesz poczytać więcej, to po prostu poczytaj o funkcjach i ich budowie, a wszystko się wyjaśni.

Podobne pytania

0 głosów
1 odpowiedź 4,011 wizyt
pytanie zadane 8 lipca 2018 w Systemy operacyjne, programy przez lameguy Użytkownik (640 p.)
0 głosów
1 odpowiedź 245 wizyt
0 głosów
1 odpowiedź 163 wizyt

92,568 zapytań

141,422 odpowiedzi

319,642 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...