수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1621037
  • Today | 417
  • Yesterday | 482

1 Articles, Search for 'stat'

  1. 2007/05/14 file 정보(stat) 와 종류 알아내기
Programming/UNIX/Linux C2007/05/14 17:40

file 정보(stat) 와 종류 알아내기

파일은 자신을 나타내기 위해서 수많은 정보를 가지고 있다. 파일이름, 파일크기, 파일의 권한, 파일의 종류(디바이스인지, 링크인지, 소켓인지, 일반파일인지)등 이다. 이번기사는 파일의 상태를 가져오는 방법에 대해서 논의 하고자 한다.


Unix 에서는 디렉토리, 장치, 소켓, FIFO 등 모든것이 파일로 존재한다. 그러므로 우선 우리는 작업을 하고자 하는 파일이 어던 종류의 파일인지를 먼저 판단할수 있어야 한다. Unix 상에서 "ls -al" 을 이용하면 아래와 같은 결과물을 볼수 있을것이다.
[yundream@localhost test]# ls -al
...
-rw-r--r-- 1 root root 249 9월 10 11:25 wc.1
drwxr-xr-x 2 root root 4096 12월 5 18:01 web_install
srwxr-xr-x 1 root root 0 1월 14 18:05 loging_socket
...



위의 결과에서 가장 앞부분 10자리가 그 파일의 특성과 권한을 나타내는데, 그중 제일 앞부분이 파일의 종류를 나타내고, 우리는 가장 앞부분의 한바이트의 문자를 이용해서 어떤 종류의 파일인지를 알아낼수 있다.
Unix 에서 자주 사용하는 파일의 종류를 아래 테이블에 정리해 두었으니 참고 바란다.
- 일반 파일
s 소켓파일
d 디렉토리
p FIFO
l 심볼링 링크된 파일
b 블럭 디바이스
c 캐릭터 디바이스



파일 정보 가져오기 #
파일의 정보는 stat(2)를 통해서 가지고 오며, 가지고온 정보는 struct stat 구조체에 저장된다. stat 구조체는 다음과 같은 내용을 가지고 있다.





위의 구조체의 정보는 inode 테이블을 참조해서 가지고오며, 우리가 필요로 하는(그 이상의) 상세한 정보를 가져온다는 것을 알수 있을것이다. inode 테이블에 대한 내용을 원한다면 /usr/src/linux/include/fs.h 의 sturct inode 를 참조하면 된다.


그럼 간단한 예제 프로그램을 만들어 보겠다. 이 프로그램은 아규먼트로 파일이름을 받아서 그 파일의 정보를 되돌려주는 프로그램으로, 파일의 권한, 퍼미션, 파일의 크기, 마지막에 수정된 날짜, 파일의 종류 등을 되돌려줄것이며, 존재하지 않는 파일의 경우 적절한 에러메시지를 출력하고 종료하게 될것이다.
이 예제의 이름은 file_info 로 하겠다.



완벽하진 않지만 그럭저럭 작동하는 프로그램이다.


프로그램은 아마 설명이 필요 없을 정도로 간단할것이다. 단지 마지막의 file_info.st_nlink (하드링크) 부분이 약간 헷갈릴 것이다. 하드링크란 보통 C 의 link(2) 함수와 쉘 코멘드인 link 에 -d 옵션을 줌으로서 만들어 진다. cp 를 이용한 복사와 하드링크를 혼동하지 말라, cp 를 이용한 복사는 자신만의 inode 를 가지는 전혀 새로운 파일을 만들지만, 하드링크의 경우 동일한 inode 를 가지고 파일이름을 만든다. 하드링크는 inode 를 가지고 파일이름을 만들므로 서로 다른 파일시스템 사이로 연결할수는 없다.
그 이유는 inode 가 해당 파일시스템에서만 유일하기 때문으로 여러개의 파일시스템을 사용할경우 다른 쪽 파일시스템에서 그 inode 가 유일함을 보장할수 없기 때문이다.


stat 는 너무 복잡합니다. 더 간단한 함수는 없을까요?
우리가 어떤 프로그램을 만들때, 우리는 종종 그 프로그램이 사용하는 파일(설정파일, 데이타 파일)들이 존재하는지 등을 검사할 필요가 있다. 이때에도 위의 stat 를 이용해서 해결 할수 있지만, 왠지 복잡하다는 생각이든다.
이때는 access(2) 를 사용하면된다.


access 는 검사할 파일에 대하여 4가지 항목, 읽을수 있는지(R_OK), 쓸수 있는지 (W_OK), 실행가능 한지 (X_OK), 존재하는 파일인지(F_OK) 등에 대한 정보를 돌려준다.




[yundream@localhost test]# gcc -o access access.
파일이 존재하지 않음 : : No such file or directory


파일 정보 변경하기
파일 정보 들을 보면 시간과 관련된 정보들이 있다. 파일에 대한 접근, 수정 시간이 이들인데, utime(2)을 이용해서 변경할 수 있다. 자세한 내용은 함수링크를 참조하기 바란다.


출처 : http://joinc.co.kr/modules.php?name=new ··· 3Dnested
"UNIX/Linux C" 카테고리의 다른 글
  • 유저 정보 가져오기 (0)2007/05/14
  • Unix 시간 조작하기 (0)2007/05/14
  • file 정보(stat) 와 종류 알아내기 (0)2007/05/14
  • utmp 를 이용한 사용자 로그인정보 관리 (0)2007/05/14
  • library 의 사용 (0)2007/05/14
2007/05/14 17:40 2007/05/14 17:40
Posted by webdizen
Tags file, stat, 파일 정보, 파일 종류
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2948

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 자료형
  • PageRank
  • Zend Framework
  • ASCII Character Codes
  • AS400
  • Signal
  • 에러
  • YouOS
  • ER Conference
  • 보안
  • ActionScript
  • 컴퓨터
  • Flex
  • Template
  • WinDbg
  • 스냅샷 격리
  • 데이터 웨어 하우스
  • CView
  • CFile
  • 공과대학

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.