10. File Handle and File Test
파일 핸들(file handle) - Perl 프로세스와 외부 세계와의 I/O 연결에 대한 이름이다.
- STDIN - 표준 입력
- STDOUT - 표준 출력
- STDERR - 표준 에러
** 파일핸들을 모두 대문자로 사용할 것을 권고 함.
파일핸들을 열고 닫기
open 함수 : 파일은 연다.
문법 : open(FILEHANDLE,”somename”);
:: FILEHANDLE - 새로운 파일핸들
:: somename - 새로운 파일핸들과 결합될 외부 파일 이름(파일 또는 장치와 같은)
** 기록을 위해서 파일 여는 경우는
open (OUT,”>outfile”);
** 내용 추가를 위해서 파일을 여는 경우
open (LOGFILE,”>>mylogfile”);
close 함수 : 그것은 닫는다.. , 프로그램을 종료하는 자동으로 닫힌다.
문법 : close(LOGFILE);
약간의 전용 : die
** 성공적으로 열리지 않은 파일핸들도 프로그램 전반에 아무런 경고 없이 사용될 수 있다. 이런 경우 만약 파일 핸들로 부터 읽어 들인다면 파일(EOF)을 얻게 된다. 이런경우에 파일을 쓴다면 , 그 데이터는 조용히 사라진다.
unless(open(DATAPLACE,”>/tmp/dataplace”)){
print “Sorry, I couldn’t create /tmp/dataplace\n”;
}else{
# 여러분의 프로그램
}
unless(open(DATAPLACE,”>/tmp/dataplace”)){
die “Sorry, I couldn’t create /tmp/dataplace\n”;
}
# 여러분의 프로그램
open(DATAPLACE,”>/tmp/dataplace”) || die “Sorry, I couldn’t create /tmp/dataplace\n”;
:: 실패일 경우에만 die가 호출 된다.
die 함수는 행번호나 파일명이 자동으로 붙여 진다. 행번호나 파일명이 붙여지길 원하지 않는다면 마지막 “\n”: 뉴라인을 포함시킨다.
** $! 변수 : 가장 최근의 운영체제 에러를 설명하는 에러문자열을 포함.
사용예) open(LOG,”>>logfile”) || die “cannot append: $!”;
파일핸들의 사용
파일 $a를 파일 $b로 복사하기
open(IN,$a) || die “cannot open $a for reading: $!”;
open(OUT,”>$b”) || die “cannot create $b: $!”;
while (<IN>){ # 파일 $a에서 한 행을 $_로 읽음
print OUT $_; # 그 행을 파일 $b에 씀
}
close(IN) || die “can’t close $a: $!”;
close(OUT) || die “can’t close $b: $!”;
-x 파일 테스트
파일 테스트와 그들의 의미
파일 테스트
|
의미
|
추가
|
-r
|
파일 또는 디렉토리 읽기 가능
|
read
|
-w
|
파일 또는 디렉토리 쓰기 가능
|
write
|
-x
|
파일 또는 디렉토리 실행 가능
|
execute
|
-o
|
파일 또는 디렉토리 사용자에 의해 소유됨
|
owner
|
-R
|
파일 또는 디렉토가 실제 사용자에는 읽기 가능하나 유효 사용자에는 그렇지 않음 (setuid 프로그램에 대해서는 -r과 다름)
|
Read
|
-W
|
Write
| |
-O
|
Owner
| |
-e
|
파일 또는 디렉토리가 존재
|
exist
|
-z
|
파일이 존재하고 크기가 0이 아님(디렉토리는 절대 공백이 아님)
|
file size not zero
|
-s
|
파일 또는 디렉토가 존재하고 0이 아닌 크기를 가짐(값은 바이트 단위의 크기임)
|
file size not zero
|
-f
|
항목이 일반 파일
|
file
|
-d
|
항목이 디렉토리
|
directory
|
-l
|
항목이 심볼릭 링크
|
symbolic link
|
-S
|
항목이 소켓
|
Socket
|
-p
|
항목이 이름있는 파이프(“fifo”)
|
named pipe
|
-b
|
항목이 (마운트 가능한 디스크 처럼) 블록 파일
|
block file
|
-c
|
항목이 (I/O 장치 처럼) 문자 파일
|
character
|
-u
|
파일 또는 디렉토리가 setuid가 설정됨
|
uid
|
-g
|
파일 또는 디렉토리가 setgid가 설정됨
|
gid
|
-k
|
파일 또는 디렉토리에 스티키(sticky) 비트가 설정됨
|
sticky
|
-t
|
파일 핸들상의 isatty()가 참
| |
-T
|
파일 “텍스트" 파일임.
|
ASCII text
|
-B
|
파일 “이진” 파일임.
|
Binary
|
-M
|
파일이 마지막으로 수정된 이후의 날 수
|
Modify days
|
-A
|
파일이 마지막으로 액세스된 이후의 날 수
|
Access days
|
-C
|
파일이 마지막으로 수정된 이후의 I-코드가 마지막으로 변경된 이후의 날 수
|
** 대부분 참과 거짓을 리턴 한다.
참과 거짓을 리턴하지 않는 경우
-s 연산자는 공백이면 0 (거짓), 공백이 아니면 파일의 길이 바이트를 나타낸다.
-M,-A,-C : 변경이후의 날수를 리턴함.
-r,-s 파일이름이나 핸들러 이름을 생략하면 $_ 변수에 있는 파일이 된다.
ex)
foreach(@some_list_of_filenames){
print “$_ is readable\n” if -r; #-r $_와 동일
}
stat과 lstat 함수
- display file or file system status (get file status)
stat 함수의 리턴값은 undef 이거나 스칼라 변수 리스트로 13개 요소의 목록이다.
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat(...);
lstat는 심볼릭 링크에 대한 stat 정보를 확인 할수 있다.
** 만약 파일명이나 파일핸들러를 생략하면 디폴트는 $_ 이다.
stat 변수 목록 설명
변수명
|
설명
|
dev
|
ID of device containing file
|
ino
|
inode number
|
mode
|
protection
|
nlink
|
number of hard links
|
uid
|
user ID of owner
|
gid
|
group ID of owner
|
rdev
|
device ID (if special file)
|
size
|
total size, in bytes
|
atime
|
time of last access
|
mtime
|
time of last modification
|
ctime
|
time of last status change
|
blksize
|
blocksize for filesystem I/O
|
blocks
|
number of blocks allocated
|
댓글 없음:
댓글 쓰기