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.