Witam,
otóż pierwszy raz przyszło mi się zmierzyć z programem innym niż tylko liczącym coś. Napotkałem całą masę problemów z większością się jakoś na chama uporałem (nie wiem czy prawidłowo). Program ma symulacją polecenia ls -l z linuxa. Polecenie to jak wiadomo w na samym początku wyświetla jego typ. Poczytałem o tym tutaj http://manpages.ubuntu.com/manpages/hardy/pl/man2/stat.2.html#contenttoc1 i na podstawie tego napisałem kod, niestety nie działa to do końca poprawnie, dlatego za komentowałem niektóre linie. Nigdy nie korzystałem z linuxa z własnej woli, stąd pewnie moje problemy.
Kod mam taki:

 
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>

int main(){
	DIR *dir;
	char bufor [80];
	
	struct stat info;
	struct dirent *ep;	
	struct passwd *usr;
	struct group *grp;
	
	dir = opendir(".");
	if(dir != NULL){
		while(ep = readdir(dir)){
			if(lstat(ep->d_name, &info) == 0){
				if(usr = getpwuid(info.st_uid)){
					if(grp = getgrgid(info.st_gid)){
						//printf("%s\n", ep->d_name);
						if(ep->d_name != "." ){//<------ to nie dziala <--------
							
							//typ pliku
							//if(info.st_mode & S_IFLNK) printf("l");
							if(info.st_mode & S_IFDIR) printf("d");      
							if(info.st_mode & S_IFREG) printf("-");
							//if(info.st_mode & S_IFBLK) printf("b");
							if(info.st_mode & S_IFCHR) printf("c");
							if(info.st_mode & S_IFIFO) printf("p");
							//if(info.st_mode & S_IFSOCK) printf("s");
							
							//kolejno prawa dostepu dla user, group, other
							(info.st_mode & S_IRUSR)? printf("r"): printf("-");//user
							(info.st_mode & S_IWUSR)? printf("w"): printf("-");
							(info.st_mode & S_IXUSR)? printf("x"): printf("-");
							
							(info.st_mode & S_IRGRP)? printf("r"): printf("-");//group
							(info.st_mode & S_IWGRP)? printf("w"): printf("-");
							(info.st_mode & S_IXGRP)? printf("x"): printf("-");
							
							(info.st_mode & S_IROTH)? printf("r"): printf("-");//other
							(info.st_mode & S_IWOTH)? printf("w"): printf("-");
							(info.st_mode & S_IXOTH)? printf("x\t"): printf("-\t");
							
						
							printf("%d\t", (int)info.st_nlink);//wyswietla ilosc dowiazan
						
							printf("%s\t", usr->pw_name);//wyswietla nazwe uzytkownika
						
							printf("%s\t", grp->gr_name);//wyswietla nazwe grupy
						
							strftime(bufor, 80, "%d %b %H:%M\t", localtime(&info.st_mtime));//data modyfikacji
							printf("%s \t", bufor);//wyswietla date modyfikacji
						
							printf("%s\n", ep->d_name);//wyswietla nazwe pliku
						
						}
					}
					else//getgrgid
						printf("blad\n");
				}
				else//getpwuid
					printf("blad\n");
			}
			else//lstat
				printf("bladd odczytu danych z katalogu\n");
		}//while readdir
	}
	else//opendir
		printf("blad katalogu\n");
	
	return 0;
}

Jeszcze, jedna rzecz która sprawia mi tu kłopot to to, że wchodzi również do folderu który nazywa się ".", zaznaczyłem to w kodzie.