diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1377554 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swp diff --git a/TP2/ex2 b/TP2/ex2 new file mode 100755 index 0000000..ae5f718 Binary files /dev/null and b/TP2/ex2 differ diff --git a/TP2/ex2.c b/TP2/ex2.c new file mode 100644 index 0000000..dadac04 --- /dev/null +++ b/TP2/ex2.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +void my_putnbr(int nb) +{ + char c; + + if (nb < 0) + { + if (nb == -2147483648) + { + write(1, "-", 1); + write(1, "2", 1); + my_putnbr(147483648); + return ; + } + nb = nb * -1; + write(1, "-", 1); + } + if (nb >= 0 && nb < 10) + { + c = nb + '0'; + write(1, &c, 1); + } + if (nb >= 10) + { + my_putnbr(nb / 10); + my_putnbr(nb % 10); + } +} + +void my_putnbrUnsignedLong(long nb) +{ + char c; + + if (nb >= 0 && nb < 10) + { + c = nb + '0'; + write(1, &c, 1); + } + if (nb >= 10) + { + my_putnbr(nb / 10); + my_putnbr(nb % 10); + } +} + +int my_strlen(char *str) +{ + int len; + + len = 0; + while (str[len] != '\0') + len++; + return (len); +} + +char *my_strcat(char *dest, char *src, int len) +{ + int i; + int j; + char *final; + + i = 0; + j = 0; + final = (char*)malloc(len); + while (dest[i] != '\0') + { + final[i] = dest[i]; + i++; + } + final[i] = '/'; + i++; + while (src[j] != '\0') + { + final[i] = src[j]; + i++; + j++; + } + final[i] = '\0'; + return (final); +} + +void showFileInfos(char *fileName) +{ + struct stat fileStat; + + if(stat(fileName, &fileStat) == -1) + { + write(1, "Foirage du statage\n", 20); + exit(1); + } + write(1, fileName, my_strlen(fileName)); + write(1, " ", 1); + my_putnbr(fileStat.st_size); + write(1, " ", 1); + my_putnbrUnsignedLong(fileStat.st_mtim.tv_sec); + write(1, "\n", 2); +} + +void listDirContent(char *leDossier) +{ + DIR *dir; + struct dirent *lesEntrees; + char *fileAbsolPath; + size_t path_length; + + dir = opendir(leDossier); + if(!dir) + { + if(errno == ENOTDIR) //C'est quand meme pas mal errno, je decouvre + { + write(1, "t'es bourré, on veut le nom d'un dossier et pas autre chose\n", 61); + exit(1); + } + write(1, "Probleme ouverture dossier\n", 28); + } + path_length = my_strlen(leDossier) + NAME_MAX + 2; + fileAbsolPath = (char*)malloc(path_length); + while((lesEntrees = readdir(dir))) + { + fileAbsolPath = my_strcat((char *)leDossier, lesEntrees->d_name, path_length); + showFileInfos(fileAbsolPath); + } + free(fileAbsolPath); + closedir(dir); +} + +int main(int argc, char **argv) +{ + if(argc != 2) + { + write(1, "t'es bourré, on veut le nom d'un dossier qu'on t'dis\n", 54); + exit(1); + } + listDirContent(argv[1]); + return 0; +} diff --git a/TP2/pouet/essai1 b/TP2/pouet/essai1 new file mode 100644 index 0000000..e69de29 diff --git a/TP2/pouet/essai2 b/TP2/pouet/essai2 new file mode 100644 index 0000000..e69de29