반응형

설명

아래의 함수를 활용하여, 아래의 [출력화면]과 같이, 파일과 디렉토리를 구분하여 출력하게 끔 하였다.

■ struct dirent

■ DIR *opendir(const char *name);

 이 함수는 디렉토리 name 에 따른 디렉토리 스트림을 오픈합니다, 그리고 디렉토리 스트림 포인터를 리턴합니다. 그 스트림은 이 디렉토리의 첫번째 엔트리에 위치합니다.

 

■ struct dirent *readdir(DIR *dirp);

 이 함수는 dirent 구조체 포인터를 반환합니다, 그 포인터는 drip에 의해 위치한 디렉토리 스트림 안에, 다음 디렉토리 엔트리를 가리킵니다. 이것은 NULL을 리턴하는데요, 디렉토리 스트림에 끝 에 도달했을 경우 혹은 에러를 발생시켰을 경우에 NULL을 리턴합니다.

 

■ int closedir(DIR *dirp);

이 함수는 drip와 관련된 디렉토리 스트림을 닫습니다.

 

■ strcut stat

■ int stat(const char *pathname, struct stat *statbuf);

 

■ struct tm

■ strcut tm *localtime(const time_t *timep);

 

출력화면

코드

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

char* formatdate(char *str, time_t val)
{
	strftime(str, 36, "%Y:%m:%d %H:%M:%S", localtime(&val));
	return str;
}

int main()
{
	   DIR *dir_info;
	   struct dirent  *dir_entry;

	   int return_stat;
	   char *file_name;
	   struct stat file_info;

	   mode_t file_mode;

	   struct passwd *my_passwd;
	   struct group *my_group;

	   struct tm *time;

	   //mkdir( "test_A"     , 0755);           // 실행 파일이 있는 곳에 생성
	   //mkdir( "test_B"     , 0755);           // 실행 파일이 있는 곳에 생성

	   dir_info = opendir( ".");              // 현재 디렉토리를 열기
	   if (dir_info != NULL)
	   {
		   while(dir_entry = readdir(dir_info))
		   { // 디렉토리 안에 있는 모든 파일과 디렉토리 출력
			   char date[36];
			   if ((return_stat = stat(dir_entry->d_name, &file_info)) == -1)
			   {
				   perror("Error : ");
				   exit(0);
			   }

			   file_mode = file_info.st_mode;

			   if (S_ISREG(file_mode))
			   {
				   printf("[reg] ");
			   }
			   else if (S_ISDIR(file_mode))
			   {
				   printf("[dir] ");
			   }

			   printf( "%-10s", dir_entry->d_name);

			   if(strcmp(dir_entry->d_name, ".") == 0 
					   || strcmp(dir_entry->d_name, "..") == 0)
			   {
				   printf("\n");
				   continue;
			   }

			   my_passwd = getpwuid(file_info.st_uid);
			   my_group = getgrgid(file_info.st_gid);

			   //printf("uid=%s,", my_passwd->pw_name); // user id 의 이름으로 출력
			   //printf("gid=%s,", my_group->gr_name);  // group id의 이름으로 출력
			   printf("uid=%d,", my_passwd->pw_uid); // user id 의 id를 숫자로 출력
			   printf("gid=%d,", my_group->gr_gid); // group id 의 id를 숫자로 출력

			   printf("%d bytes, ",file_info.st_size); // 파일 사이즈 출력하기
			   printf("mtime=%s\n", formatdate(date, file_info.st_mtime));
			   //printf("mtime=%d\n", file_info.st_mtime);

	       }
		   closedir( dir_info);
	   }
}

 

 

 

참고했던 자료

https://www.joinc.co.kr/w/man/2/stat

 

파일의 상태정보를 얻어온다.

#include #include #include #include #include #include #include int main(int argc, char **argv) { int return_stat; char *file_name; struct stat file_info; struct passwd *my_passwd; struct group *my_group; mode_t file_mode; if (argc != 2 ) { printf("Usage :

www.joinc.co.kr

 

stas 명령 : https://ubunlog.com/ko/comando-stat-algunos-ejemplos-de-uso/

 

Stat 명령, Ubuntu의 몇 가지 기본 예

다음 기사에서는 Gnu / Linux에서 사용할 수있는 Stat 명령의 몇 가지 기본 예제를 살펴볼 것입니다.

ubunlog.com

 

 

반응형