#include <dirent.h> //czytamy pliki i foldery
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <string>
#include <sys/stat.h> //status pliku
using namespace std;
string convertTime (time_t takeTime)
{
struct tm *timeConverter = localtime(&takeTime);
return(asctime(timeConverter));
}
int main()
{
DIR *dir;
struct dirent *dp;
struct stat statbuf;
string strFile;
dir = opendir("/home/piotr/Dokumenty/C/Nauka programy");
while ((dp = readdir(dir))!=NULL) //czytaj w folderze az przejdziesz przez wszystkie pliki
{
strFile=dp->d_name; //read file name
if ((strFile.at(strFile.size()-1)!='~')&&(strFile!=".")&&(strFile!="..")) //nie widzi dzieki temu usunietych programow (tablica ma tylde na koncu ze wyjebane / usuniete)
{ // kropki to tylko odniesienia do polozenia
stat(dp->d_name,&statbuf); //jak rowne -1 to poprawny (mozna coutowac)
cout<<endl<<"file name: "<<strFile<<endl; //nazwa pliku
cout<<"device ID of device containing: "<<statbuf.st_dev<<endl; //ID partycji
cout<<"file serial number: "<<statbuf.st_ino<<endl; //ID tablicy pamięci
cout<<"mode of file: "<<statbuf.st_mode<<endl; //zbior cech pliku
//interesuje nas co z tego numery wyrwiemy
// jaki konkretny typ "pliku" to jest
cout<<boolalpha<<"is it regular file: "<<(S_ISREG(statbuf.st_mode))<<endl; //badamy czy to zwykly plik dwie metody sa na badania
//cout<<"is it regular file: "<<((statbuf.st_mode & S_IFMT) == S_IFREG)<<endl; zakomentowana bo raz wystarczy ;>
//specjalny typ pliku:
cout<<"is it directory: "<<(S_ISDIR(statbuf.st_mode))<<endl; //czy to scierzka
cout<<"is it character device: "<<(S_ISCHR(statbuf.st_mode))<<endl; //driver - wysyla i otrzymuje po jednym znaku serial ports, pararell ports, sound card
cout<<"is it block device: "<<(S_ISBLK(statbuf.st_mode))<<endl; //driver - wysyla cale bloki informcji, hard disc , usb camera ,disc on key;
cout<<"is it FIFO named pipe: "<<(S_ISFIFO(statbuf.st_mode))<<endl; //komunikacja miedzy programami (lokalnymi) wysyla informacje z jednego procesu do drugiego
cout<<"is it socket: "<<(S_ISSOCK(statbuf.st_mode))<<endl; //komunikacja miedzy programami (lokalnymi) -specyficzny
cout<<"is it symbolic link: "<<(S_ISLNK(statbuf.st_mode))<<endl; //wskazuje jakas scierzke programowi gdzie ma szukac innego programu
cout<<noboolalpha;// jest jeszcze typ pliku door ale tylko na jednym pewnym systemie - olac
//moze nie rozpoznać typu pliku co wtedy???
cout<<"number of hard links to file: "<<statbuf.st_nlink<<endl; //odniesienia do jakiegos miejsca (ze plik wymaga czegos np w swoim folderze a to jest gdzies indziej) sa miekkie i twarde linki - zaleza od uprawnien
cout<<"user ID of file: "<<statbuf.st_uid<<endl;
cout<<"grup ID of file: "<<statbuf.st_gid<<endl;
cout<<"device ID: "<<statbuf.st_rdev<<endl; //rozszerzona inf ID partycji
cout<<"file size: "<<statbuf.st_size<<endl; //wielkosc pliku
cout<<"block size for I/O: "<<statbuf.st_blksize<<endl; //minimalna wielkosc jaka zajmie plik na dysku
cout<<"number of blocks allocated for this number: "<<statbuf.st_blocks<<endl; //liczba blokow dla pliku
cout<<"time of last acces: "<<convertTime(statbuf.st_atime); //czas ostatniego wejscia w plik
cout<<"time of last file modification: "<<convertTime(statbuf.st_mtime); //czas ostatniej zmiany pliku
cout<<"time of last file status change: "<<convertTime(statbuf.st_ctime); //czas ostatniego wejscia w plik
}
}
}