Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 프로세스
  • 우아한형제들
  • Linux
  • C
  • Operating System
  • DB
  • 우테코 체스
  • 우아한테크코스
  • 자바
  • 인덱스
  • 운영체제
  • 리눅스
  • BOJ
  • 우테코
  • OS
  • 우테코5기
  • SIGINT
  • 백준
  • 정규화
  • 블랙잭
  • 1259
  • 우아한테크코스5기
  • OperatingSystem
  • 트랜잭션
  • C++
  • 데이터 조작어
  • Spring
  • signal
  • 원시값 포장
  • bean

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX stat() fstat() lstat()
C & LINUX

C / LINUX stat() fstat() lstat()

2022. 5. 1. 18:33

함수 기능

pathname/fildes파일의 stat구조체를 리턴하는 시스템호출

stat

지정한 pathname에 해당하는 파일에 대한 정보를 넣은 stat구조체를 buf로 리턴

fstat

지정 filedes 오픈 확인하고 해당파일에 대한 정보를 넣은 stat구조체를 buf로 리턴

lstat

심볼릭 링크 파일 자체에 대한 정보를 넣은 stat구조체 자체 리턴

함수 원형

#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
int stat(const char *restrict pathname, struct stat *restrict buf)
int fstat(int filedes, struct stat *buf)
int lstat(const char *restrict pathname, struct stat *restrict buf)

리턴 값 : Pathname,filedes 파일의 stat 구조체 리턴하는 시스템호출

함수 파라메터

pathname

파일이름

 

filedes

파일 디스크립터

 

buf

stat구조체 리턴받을 버퍼

함수 예제

stat1

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>

int main(int argc, char*argv[]){
    struct stat statbuf;

    if(argc!=2){
        fprintf(stderr, "usage: %s <file>\n",argv[0]);
        exit(1);
    }

    if((stat(argv[1], &statbuf))<0){
        fprintf(stderr,"stat error\n");
        exit(1);
    }

    printf("%s is %ld bytes\n", argv[1],statbuf.st_size);
    exit(0);
}

stat2

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>

struct stat statbuf;

void ssu_checkfile(char *fname, time_t *time);

int main(int argc, char *argv[]){
    time_t intertime;

    if(argc !=2){
        fprintf(stderr, "usage: %s <file>\n",argv[0]);
        exit(1);
    }

    if(stat(argv[1],&statbuf)<0){
        fprintf(stderr, "stat error for %s\n",argv[1]);
        exit(1);
    }
    
    intertime = statbuf.st_mtime;
    while(1){
        ssu_checkfile(argv[1], &intertime);
        sleep(10);
    }
}

void ssu_checkfile(char *fname, time_t *time){
    if(stat(fname, &statbuf)<0){
        fprintf(stderr, "Warning : ssu_checkfile() error!\n");
        exit(1);
    }
    else
        if(statbuf.st_mtime != *time){
            printf("Warning : %s was modified!.\n",fname);
            *time = statbuf.st_mtime;
        }
}

함수 결과

stat1

stat2

 

 

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.

'C & LINUX' 카테고리의 다른 글

C / LINUX ftell(3) fseek(3) rewind(3)  (0) 2022.05.02
C / LINUX fread(3), fwrite(3)  (0) 2022.05.02
C / LINUX dup() dup2()  (0) 2022.05.01
C / LINUX write()  (0) 2022.05.01
C / LINUX setbuf(3) setvbuf(3)  (0) 2022.05.01
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX ftell(3) fseek(3) rewind(3)
    • C / LINUX fread(3), fwrite(3)
    • C / LINUX dup() dup2()
    • C / LINUX write()
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바