C에서 파일 크기 가져 오기

Jinku Hu 2023년10월12일
  1. stat함수를 사용하여 C에서 파일 크기 가져 오기
  2. fstat함수를 사용하여 C에서 파일 크기 가져 오기
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_modest_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);
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C File