148p
저수준 파일 관련 함수
open() 파일을 읽거나 쓰기 위해서 열거나 생성
creat() 비어있는 파일을 생성
close() 이미 열려있는 파일 닫기
read() 열려있는 파일로 데이터 추출
write() 열려있는 파일로 데이터 저장
lseek() 파일에서 특정 위치로 파일 포인터 이동
unlink() 파일 삭제
remove() 파일이나 디렉토리 삭제
fcntl() 파일과 관련되어 있는 속성 조정
pathname 열거나 생성하고자 하는 파일의 이름
oflag 플래그는 or로 구성가능
mode 새로운 파일을 만드는 경우 접근권한
파일의 플래그
반드시 하나만 정의
O_RDONLY 읽기전용
O_WRONLY 쓰기전용
O_RDWR 읽기, 쓰기 가능
파일 열기
http://forum.falinux.com/zbxe/index.php?document_srl=408448&mid=C_LIB
파일 읽기
http://forum.falinux.com/zbxe/index.php?_filter=search&mid=C_LIB&search_target=title&search_keyword=%ED%8C%8C%EC%9D%BC&document_srl=466628
BUFF_SIZE 한번에 읽어오는 사이즈 버퍼 사이즈 만큼만 읽어온다.
대부분의 c 언어의 함수들의 리턴형은 성공하면 0 실패하면 -1
\n도 문자이다
파일 쓰기
http://forum.falinux.com/zbxe/index.php?_filter=search&mid=C_LIB&search_target=title&search_keyword=%ED%8C%8C%EC%9D%BC&document_srl=408456
whence offset 을 옮기기위한 기준점
SEEK_SET, SEEK_CUR,SEEK_END
offset 기준점에서 상대적인 거리 (byte단위)
SEEK_CUR, SEEK_END와 같이 쓰일때는 음수도 허용
copy.c
터미널 표준 에러로 출력하란 소리
write(2, "Usage:copyfile1 file2",25);
스트림(stream)
프로그램과 파일사이의 자료 흐름
표준 입출력 함수는 스트림을 매개로 하여 파일에 접근
파일 포인터(FIle*)를 사용하여 참조
<stdio.h>에 정의된 상수
EOF: 파일의 끝
NULL : 널 포인터
BUFSIZ : 버퍼의 크기
C++ 클래스와 비슷
FILE 구조체
하나의 스트림을 다루기 위한 정보를 포함하는 구조체
-파일 디스크립터, 버퍼공간에 대한 포인터, 버퍼 크기, 버퍼에 남아있는 문자의 수, 에러 플래그 등
스트림을 개방하면 FILE 구조체에 대한 포인터를 반환
- 표준 입출력 함수는 fopen()에서 돌려 받은 값을 함수의 인자로 사용하여 다루고자 하는 파일을 지칭
각 프로세스는 3개의 파일 포인터 존재
- stdin(표준입력), stdout(표준 출력), stderr(표준 에러)
스트림 열기
해당파일의 스트림을 열고 버퍼를 할당
성공하면 FILE 포인터, 실패하면 NULL값을 반환
Type : 파일의 접근 모드(open() 함수와 비교)
스트림 닫기
FILE 포인터가 가리키는 스트림과 파일을 분리하고, 파일을 닫고 자원을 반환
성공하면0, 실패하면 EOF(-1)을 반환 EOF를 만날수 없다 계속 대기하니깐
출력 버퍼에 있는 모든 자료는 파일에 저장
입력 버퍼에 있는 모든 자료는 버려진 후에 버퍼를 해제
버퍼기반 입출력의 필요성
구조체 전체를 읽거나 쓰기를 원할 때
-getc() putc()등을 사용한다면
구조체 전체를 루프를 사용하여 순환하면서 한문자씩 처리
버퍼기반 입출력
size_t fread(void *ptr,size_t size, size_t nobj, FIle *fp);
size_t fwrite(const void *ptr,size_t size, size_t nobj,File *fp);
지정된 스트림에서 이진 구조체를 쓰거나 읽는다
입출력 객체의 개수
fread()한수의 경우 리턴값이 nobj값보다 작으면 에러나 파일의 끝을 만난경우 (ferror(),feof()등으로 구별
이진 배열에 대한 입출력이나 구조체에 대한 입출력으로 사용
fcopy() : ansi-c
open() : posix
open과 fopen과의 차이
https://kldp.org/node/1350
getc()는 매크로 fgetc()함수로 구현
int ungetc(int c,FIle *fp);
지정된 문자를 스트림의 맨 앞으로 반환
성공하면 c 실패하면 EOF를 반환
특정 조검을 검사하기 위해 하나의 문자를 읽은 후 원래의 상태로 복원하기 위해 이용(단, 같은 문자일 필요는 없다)
- 입력 문자열을 단어나 토큰의 형태로 분리
문자 단위 출력
#define putchar(c) putc(c,stdout)
putc()는 매크로, fputc()는 함수로 구현
-putc()의 인자로 수식을 쓸 경우에는 주의
- fputc()는 함수이므로, 자신의 주소를 가질 수 있다.
파일 시스템의 종류
minix, ext, ext2, xiafs, umsdos, hpfs, isofs, msdos, nfs, sysv
파일의 상태 및 정보를 얻기
stat 파일의 상태값을 가지고 있는 구조체
http://downman.tistory.com/126
argv[0]는 자기 자신
argv[]
argument variable
argc
count
$ ./copy a.txt b.txt
argc의 값은 count = 3
argv[0]의 첫번째 값 = copy
argv[1]의 두번째 값 = a.txt
argv[2]의 세번째 값 = b.txt
makefile 을 생성하고
make TARGET=name 하면 인자값 변형 가능
심볼릭 링크(소프트 링크)
심볼릭 링크는 파일에 대한 간접적인 포인터
- 실제 파일에 대한 경로를 저장
링크의 한계점을 극복
- 링크는 단일 파일 시스템에서만 허용
- 디렉토리에 대한 링크는 수퍼 유저만 수행
파일을 다루는 함수를 사용할 때 심볼릭 링크를 추적하는지에 대해서 확인
- 심볼릭 링크 파일 자체를 다루는 함수
lchown, lstat,readlink, remove, rename, unlink
- 심볼릭 링크파일을 추적하는 함수
access, chdir, chmod,chown, creat, exec, link,mkdir, mkfifo, open, opendir, pathconf
정보 얻기
- ㅅㅁ볼릭 링크 파일을 읽는 함수 open, read, close 함수가 혼합된
<unistd.h>
int readlink(const char *pathname, char *buf, int bufsize);
파일 접근 권한 결정
access(const char *pathname, int mode);
mode:R_OK,W_ok,X_Ok,F_ok
f 있냐 없냐 x는 실행
파일 속성
스티키 비트
S_isvtx
- 실행파일의 이미지를 프로그램의 종료후에도 swap영역에 저장시킴으로써 재실행시 빠르게 메모리에 적재할수 있게 하기 위한 방법
- 요즘에는 사용 안함
디렉토리 구조
i-node list에 해당되는 디렉토리가 어딨는지 알려준다.
앞의 헤더를 날려버리면 데이터는 살아 있지만 찾기 힘들다 !!!
그래서 로우포멧을 해야한다!!! 아예 모든 데이터를 0으로 바꾸어버린다.
'Linux' 카테고리의 다른 글
사물인터넷 기반 융합기술 교육 - 리눅스프로그래밍 3일 (0) | 2017.07.19 |
---|---|
사물인터넷 기반 융합기술 교육 - 리눅스프로그래밍 1일 (2) | 2017.07.17 |
[ubuntu] root 권환으로 변경 (0) | 2017.03.31 |