C에서 파일 크기 가져 오기
이 기사에서는 C에서 파일 크기를 얻는 방법에 대한 몇 가지 방법을 설명합니다.
stat
함수를 사용하여 C에서 파일 크기 가져 오기
stat
시스템 호출은 주어진 파일의 다양한 속성을 검색하는 데 사용할 수있는 POSIX 호환 함수입니다. 두 개의 인자를받습니다. 첫 번째는 파일의 경로명을 가리켜 야하는char
포인터이고 두 번째 인자는 함수 수동에서 광범위하게 설명되는struct stat
포인터 유형입니다. 함수 호출이 성공적으로 반환되면 사용자는 멤버에 직접 액세스하여struct stat
에서 파일의 필요한 속성을 추출 할 수 있습니다. 파일 크기는 구조의 st_size
멤버에 저장됩니다. stat
함수는 속성을 검색하기 위해 파일에 대한 권한이 필요하지 않지만 호출자는 경로 이름에 포함 된 모든 디렉토리에 대한 실행 권한이 있어야합니다.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>
const char *filename = "input.txt";
int main(int argc, char *argv[]) {
struct stat sb;
if (stat(filename, &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("Inode number: %lu\n", sb.st_ino);
printf("User ID of owner: %u\n", sb.st_uid);
printf("Group ID of owner: %u\n", sb.st_gid);
printf("Total file size: %lu bytes\n", sb.st_size);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}
출력:
Inode number: 12638061
User ID of owner: 1000
Group ID of owner: 1000
Total file size: 126 bytes
Last status change: Sat Feb 6 23:35:02 2021
Last file access: Sat Feb 6 23:35:02 2021
Last file modification: Sat Feb 6 23:35:02 2021
st_size
멤버는 파일의 총 크기 (바이트)를 나타냅니다. 주어진 경로명이 심볼릭 링크 인 경우,이 멤버는 링크에 의한 경로명 포인터의 길이를 나타냅니다. 위의 코드 샘플에서const
선언 된 하드 코딩 된 문자열 값에서 파일 이름을 가져 오는 예제를 구현합니다. 단, 사용자는 다음 예제에서 설명하는 것처럼 프로그램 매개 변수로 파일 이름을 전달할 수 있습니다. stat
호출은 실패시-1
을 반환하고 그에 따라errno
가 설정됩니다. 그렇지 않으면 성공을 나타 내기 위해 0이 반환됩니다.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>
int main(int argc, char *argv[]) {
struct stat sb;
char *filename = NULL;
if (argc != 2) {
printf("Usage: ./program filename\n");
exit(EXIT_FAILURE);
}
filename = argv[1];
if (stat(filename, &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("Inode number: %lu\n", sb.st_ino);
printf("User ID of owner: %u\n", sb.st_uid);
printf("Group ID of owner: %u\n", sb.st_gid);
printf("Total file size: %lu bytes\n", sb.st_size);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}
fstat
함수를 사용하여 C에서 파일 크기 가져 오기
또는 대상 파일을 지정하는 첫 번째 인수로 파일 설명자를 사용하는fstat
함수를 사용할 수 있습니다. 파일 설명자는open
시스템 호출로 얻을 수 있지만,close
시스템 호출을 사용하여 필요하지 않은 경우 열린 파일을 닫아야합니다. 이 기사의 모든 예제는 대부분의struct stat
멤버를 인쇄합니다. 추가 기능을 사용하여 속성에 대한 관련 정보를 추출해야 할 수도 있습니다. st_mode
및st_dev
.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>
const char *filename = "input.txt";
int main(int argc, char *argv[]) {
struct stat sb;
int fd = open(filename, O_RDONLY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
if (fstat(fd, &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("Inode number: %lu\n", sb.st_ino);
printf("User ID of owner: %u\n", sb.st_uid);
printf("Group ID of owner: %u\n", sb.st_gid);
printf("Total file size: %lu bytes\n", sb.st_size);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
close(fd);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook