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

0 głosów
515 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,360 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,360 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,767 wizyt
pytanie zadane 8 lipca 2018 w Systemy operacyjne, programy przez lameguy Użytkownik (640 p.)
0 głosów
1 odpowiedź 347 wizyt
0 głosów
1 odpowiedź 237 wizyt

93,630 zapytań

142,551 odpowiedzi

323,054 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1936p. - dia-Chann
  2. 1916p. - DziarnowskiJ
  3. 1886p. - Łukasz Piwowar
  4. 1868p. - CC PL
  5. 1842p. - Maurycy W
  6. 1841p. - raydeal
  7. 1840p. - Adrian Wieprzkowicz
  8. 1782p. - rucin93
  9. 1777p. - robwarsz
  10. 1743p. - Michal Drewniak
  11. 1701p. - rafalszastok
  12. 1588p. - Tomasz Bielak
  13. 1491p. - Rafał Trójniak
  14. 1257p. - ssynowiec
  15. 1208p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...