• 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ę

Aruba Cloud - Virtual Private Server VPS
0 głosów
438 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,340 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,340 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,380 wizyt
pytanie zadane 8 lipca 2018 w Systemy operacyjne, programy przez lameguy Użytkownik (640 p.)
0 głosów
1 odpowiedź 290 wizyt
0 głosów
1 odpowiedź 187 wizyt

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...