π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[λλ ν°λ¦¬μ μκ° μ²λ¦¬] λλ ν°λ¦¬μ λν μ 보 μΆλ ₯νκΈ° ( = $ ls -RI) λ³Έλ¬Έ
π©π» IoT (Embedded)/Raspberry Pi
[λλ ν°λ¦¬μ μκ° μ²λ¦¬] λλ ν°λ¦¬μ λν μ 보 μΆλ ₯νκΈ° ( = $ ls -RI)
μ§μ§μνμΉ΄ 2024. 1. 7. 23:59728x90
λ°μν
<μμμ§ λμ μ¬λ¬ΌμΈν°λ·μ μν 리λ μ€ νλ‘κ·Έλλ° with λΌμ¦λ² 리νμ΄ μμ μ μ°Έκ³ ν΄μ μμ±νμμ΅λλ€ :-)>
β λλ ν°λ¦¬
νμΌμ λ΄λ λ° μ¬μ©νλ€
μλ‘μ΄ λλ ν°λ¦¬λ₯Ό μμ±νλ©΄ νμ¬μ λλ ν°λ¦¬λ₯Ό μλ―Ένλ€
"." νμΌκ³Ό λΆλͺ¨ λλ ν°λ¦¬λ₯Ό μλ―Ένλ ".." νμΌμ΄ μλμΌλ‘ μμ±λλ€
λλ ν°λ¦¬λ μΌλ° νμΌ λ° λ€λ₯Έ λλ ν°λ¦¬μ μ΄λ¦μΌλ‘ ꡬμ±λ νμΌλ‘, μΌλ° νμΌ μ‘°μμ μ°μ΄λ ν¨μλ₯Ό λμΌνκ² μ¬μ©νλ€
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <dirent.h> // λλ ν°λ¦¬ μ‘°μ ν¨μ
#include <pwd.h> // getpwuild() ν¨μ: uid μ΄μ©ν΄μ μ¬μ©μμ μ΄λ¦ ꡬνκΈ°
#include <grp.h> // getgrgid() ν¨μ: gid μ΄μ©ν΄μ κ·Έλ£Ήμ μ΄λ¦ ꡬνκΈ°
#include <time.h> // localtime() ν¨μ
#include <sys/stat.h>
#include <sys/types.h>
int listDir(char *arg) {
// λλ ν°λ¦¬ μ‘°μμ μν μ€νΈλ¦Ό
DIR *pdir;
// λλ ν°λ¦¬μ νλͺ©μ μν ꡬ쑰체
struct dirent *dirt;
// νμΌμ μ 보λ₯Ό μν ꡬ쑰체
struct stat statBuf;
// μ¬μ©μ μ΄λ¦ μΆλ ₯μ μν
struct passwd *username;
// κ·Έλ£Ή μ΄λ¦ μΆλ ₯μ μν λ³μ
struct group *groupname;
// μκ° μΆλ ₯μ μν λ³μ
struct tm *t;
int i = 0, count = 0;
char *dirName[255], buf[255], permission[11], mtime[20];
memset(dirName, 0, sizeof(dirName));
memset(&dirt, 0, sizeof(dirt));
memset(&statBuf, 0, sizeof(statBuf));
// ν΄λΉ λλ ν°λ¦¬μ μ€νΈλ¦Ό μ΄κΈ°
if ((pdir = opendir(arg)) <= 0) {
perror("opendir");
return -1;
}
// λλ ν°λ¦¬λ‘ μ΄λ
chdir(arg);
// νμ¬ λλ ν°λ¦¬μ μ λ κ²½λ‘ κ°μ Έμμ νμ
getcwd(buf, 255);
printf("\n%s: Directory\n", arg);
// νμ¬ λλ ν°λ¦¬λ₯Ό μ½μ μ μμΌλ©΄ μν
while ((dirt = readdir(pdir)) != NULL) {
// νμ¬ λλ ν°λ¦¬μ λν μ 보 κ°μ Έμ€κΈ°
lstat(dirt->d_name, &statBuf);
// νμΌ μ’
λ₯ κ²μ¬
if (S_ISDIR(statBuf.st_mode))
permission[0] = 'd';
else if (S_ISLNK(statBuf.st_mode))
permission[0] = 'l';
else if (S_ISCHR(statBuf.st_mode))
permission[0] = 'c';
else if (S_ISBLK(statBuf.st_mode))
permission[0] = 'b';
else if (S_ISSOCK(statBuf.st_mode))
permission[0] = 's';
else if (S_ISFIFO(statBuf.st_mode))
permission[0] = 'P';
else
permission[0] = '-';
// ## νμΌμ λν μ 보λ₯Ό κ°μ Έμ¨ ν νμΌμ μ νκ³Ό νΌλ―Έμ
μ λΆμν΄μ λ¬Έμμ΄ λ°°μ΄μ μ μ₯νλ€
// μ¬μ©μμ λν κΆν κ²μ¬
permission[1] = statBuf.st_mode&S_IRUSR? 'r' : '-';
permission[2] = statBuf.st_mode&S_IWUSR? 'w' : '-';
permission[3] = statBuf.st_mode&S_IXUSR? 'x' :
statBuf.st_mode&S_ISUID? 'S' : '-';
// κ·Έλ£Ήμ λν κΆν κ²μ¬
permission[4] = statBuf.st_mode&S_IRGRP? 'r' : '-';
permission[5] = statBuf.st_mode&S_IWGRP? 'w' : '-';
permission[6] = statBuf.st_mode&S_IXGRP? 'x' :
statBuf.st_mode&S_ISGID? 'S' : '-';
// λ€λ₯Έ μ¬μ©μμ λν κΆν κ²μ¬
permission[7] = statBuf.st_mode&S_IROTH? 'r' : '-';
permission[8] = statBuf.st_mode&S_IWOTH? 'w' : '-';
permission[9] = statBuf.st_mode&S_IXOTH? 'x' : '-';
// μ€ν°ν€ λΉνΈ μ€μ
if (statBuf.st_mode & S_IXOTH) {
permission[9] = statBuf.st_mode & S_ISVTX? 't' : 'x';
} else {
permission[9] = statBuf.st_mode & S_ISVTX? 'T' : 'x';
}
permission[10] = '\0';
if (S_ISDIR(statBuf.st_mode) == 1) {
if (strcmp(dirt->d_name, ".") && strcmp(dirt->d_name, "..")) {
dirName[count] = dirt -> d_name;
count = count + 1;
}
}
// uid μμ μ¬μ©μμ μ΄λ¦ νλ
username = getpwuid(statBuf.st_uid);
// gid μμ μ¬μ©μμ μ΄λ¦ νλ
groupname = getgrgid(statBuf.st_gid);
// μ΅κ·Ό μμ λ μκ° μΆλ ₯
t = localtime(&statBuf.st_mtime);
// μΆλ ₯μ μν μμν: tm ꡬ쑰체
sprintf(mtime, "%04d-%02d-%02d %02d:%02d:%02d",
t->tm_year + 1900, t->tm_mon + 1, t -> tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
printf("%s %2d %s %s %9ld %s %s\n", permission, statBuf.st_nlink,
username->pw_name, groupname->gr_name,
statBuf.st_size, mtime, dirt->d_name);
}
for (i = 0; i < count; i++) {
// λ€λ₯Έ λλ ν°λ¦¬μ λν μ¬κ· νΈμΆ
if (listDir(dirName[i]) == -1)
break;
}
printf("\n");
// μ΄μλ λλ ν°λ¦¬μ μ€νΈλ¦Ό λ«λλ€
closedir(pdir);
// μλ λλ ν°λ¦¬λ‘ μ΄λ
chdir("..");
return 0;
}
int main(int argc, char ** argv) {
// μ¬μ©μ IDμ κ·Έλ£Ή ID μ΄μ©ν΄μ μ¬μ©μμ μ΄λ¦κ³Ό κ·Έλ£Ήμ μ΄λ¦μ ꡬν ν μ κ·Ό κΆνκ³Ό μμ μκ° λ±
// νμΌμ λν μ 보λ₯Ό νλ©΄μ μΆλ ₯νλ€
// μλΈ λλ ν°λ¦¬μ λν΄μλ μ¬κ· νΈμΆ μννκ³ , κ΄λ ¨ μ 보μ μΆλ ₯μ΄ λλλ©΄ λλ ν°λ¦¬λ₯Ό λ«λλ€
if (argc < 2) {
fprintf(stderr, "Usage : %s directory_name.\n", argv[0]);
return -1;
}
// μ¬μ©μκ° μ
λ ₯ν λλ ν°λ¦¬μ λν΄ νΈμΆνλ€
listDir(argv[1]);
return 0;
}
/*
gani@gani:~/raspi/File $ gcc -o list list.c
gani@gani:~/raspi/File $ ./list . | head
*/
gcc -o list list.c
./list . | head
728x90
λ°μν
'π©βπ» IoT (Embedded) > Raspberry Pi' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Comments