linux에서 기본 입출력 시스템 함수

linux C를 공부하는 과정에서 5개의 기본적인 입출력 시스템 함수인 오픈 (),read (),write (),lseek (),close () 가 스스로 몇 가지 예를 썼지만 좀 어수선했다. 나중에 API의 귀납이 매우 명확하다는 것을 깨달았다.본문의 대다수 내용은 오리지널이 아니라 간단하게 정리한 것이기 때문에 전재편으로 삼자.
다음 내용은 linux C API 문서 출처: net.pku.edu.cn/~yhf/linux_비룡
open
파일 관련 함수 열기read,write,fcntl,close,link,stat,umask,unlink,fopen 헤더 파일sys/types.h sys/stat.h fcntl.h
함수 int open(const char *pathname, int flags) 정의;int open( const char *pathname, int flags, mode_t mode); 함수 설명 매개 변수 pathname가 열려는 파일 경로 문자열을 가리킵니다.다음은 flags 매개변수가 사용할 수 있는 플래그입니다. ORDONLY 파일을 읽기 전용으로 열기 OWRONLY 파일만 쓰기 ORDWR은 읽기 및 쓰기 방식으로 파일을 엽니다.상기 세 가지 깃발은 서로 밀어붙인다. 즉, 동시에 사용할 수 없지만 아래의 깃발과 OR(|) 연산자를 조합할 수 있다.O_CREAT에서 열려는 파일이 없으면 자동으로 설정됩니다.O_EXCL OCREAT도 설정되어 있으며 이 명령은 파일이 있는지 확인합니다.파일이 존재하지 않으면 이 파일을 만듭니다. 그렇지 않으면 파일 열기 오류가 발생합니다.또한 OCREAT 및 OEXCL이 동시에 설정되고 열려는 파일이 기호로 연결되면 파일이 열리지 않습니다.O_NOCTTY에서 열려는 파일이 단말기 장치일 경우 이 단말기는 프로세스 제어 단말기로 간주되지 않습니다.O_TRUNC 파일이 존재하고 쓰기 가능한 방식으로 열릴 때, 이 기호는 파일의 길이를 0으로 하고, 원래 이 파일에 저장된 자료도 사라집니다.O_APPEND는 파일을 읽고 쓸 때 파일 끝에서부터 이동합니다. 즉, 쓴 데이터가 파일 뒤에 첨부됩니다.O_NONBLOCK은 데이터를 읽거나 기다리든지 상관없이 파일을 차단할 수 없는 방식으로 엽니다.O_NDELAY와 ONONBLOCK. O_SYNC는 파일을 동기화하여 엽니다.O_NOFOLLOW 매개변수 pathname이 기호로 연결된 파일을 가리키는 경우 파일을 열 수 없습니다.O_DIRECTORY pathname 매개변수가 디렉토리가 아닌 경우 파일을 열 수 없습니다.Linux2 입니다.2 이후 일부 시스템 보안 문제를 피하기 위해 특유의 깃발.매개 변수 모드는 다음과 같은 몇 가지 조합이 있습니다. 새 파일을 만들 때만 효력이 발생하고, 실제 파일을 만들 때의 권한은umask값에 영향을 받기 때문에 이 파일의 권한은 (mode-umaks)이어야 합니다.S_IRWXU00700 권한은 해당 파일 소유자에게 읽기 및 쓰기 및 실행 권한이 있음을 나타냅니다.S_IRUSR 또는 SIREAD, 00400 권한은 해당 파일 소유자에게 읽기 가능한 권한이 있음을 나타냅니다.S_IWUSR 또는 SIWRITE, 00200 권한은 파일 소유자에게 쓰기 가능한 권한이 있음을 나타냅니다.S_IXUSR 또는 SIEXEC, 00100 권한은 파일 소유자에게 실행 가능한 권한이 있음을 나타냅니다.S_IRWXG 00070 권한은 파일 사용자 그룹에 읽기 및 쓰기 및 실행 권한이 있음을 나타냅니다.S_IRGRP 00040 권한은 파일 사용자 그룹에 읽을 수 있는 권한이 있음을 나타냅니다.S_IWGRP 00020 권한은 파일 사용자 그룹에 쓰기 가능한 권한이 있음을 나타냅니다.S_IXGRP 00010 권한은 파일 사용자 그룹에 실행 가능한 권한이 있음을 나타냅니다.S_IRWXO 00007 권한은 다른 사용자가 읽기 및 쓰기 및 실행 권한을 가진다는 의미입니다.S_IROTH 00004 권한은 다른 사용자에게 읽을 수 있는 권한이 있음을 나타냅니다. SIWOTH 00002 권한은 다른 사용자에게 쓰기 가능한 권한을 나타냅니다.S_IXOTH 00001 권한은 다른 사용자에게 실행 가능한 권한이 있음을 나타냅니다.반환값 검토하고자 하는 모든 권한이 검사를 통과하면 0값을 되돌려줍니다. 이것은 성공을 의미하며, 권한이 금지되면 -1을 되돌려줍니다.오류 코드 EEXIST 매개 변수 pathname이 가리키는 파일이 이미 존재하지만 OCREAT 및 OEXCL 플래그.EACCESS 매개 변수 pathname이 가리키는 파일은 테스트할 수 있는 권한에 맞지 않습니다.EROFS에서 쓰기 권한을 테스트하려는 파일이 읽기 전용 파일 시스템에 있습니다.EFAULT 매개변수 pathname 포인터가 액세스 가능한 메모리 공간을 초과합니다.EINVAL 매개 변수 mode가 잘못되었습니다.ENAMETOOLONG 매개변수 pathname이 너무 깁니다.ENOTDIR 매개변수 pathname은 디렉토리가 아닙니다.ENOMEM 코어 메모리가 부족합니다.ELOOP 매개변수 pathname에 기호 연결 문제가 너무 많습니다.EIO 입출력 액세스 오류입니다.추가 설명은access()를 사용자 인증에 대한 판단으로 사용할 때 특히 조심해야 한다. 예를 들어access() 이후에 오픈() 빈 파일을 사용하면 시스템 안전에 문제가 생길 수 있다.예제
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
main()
{
int fd,size;
char s [ ]=”Linux Programmer!
”,buffer[80]; fd=open(“/tmp/temp”,O_WRONLY|O_CREAT); write(fd,s,sizeof(s)); close(fd); fd=open(“/tmp/temp”,O_RDONLY); size=read(fd,buffer,sizeof(buffer));close(fd); printf(“%s”,buffer); }

Linux Programmer 실행!
read
열린 파일에서 데이터를 읽는 관련 함수readdir, write, fcntl,close,lseek,readlink,fread 헤더 파일unistd.h정의 함수 ssizet read(int fd, void *buf, size_t count); 함수 설명read () 는 매개 변수 fd가 가리키는 파일을count 바이트로 buf 바늘이 가리키는 메모리로 전송합니다.매개 변수count가 0이면read()는 작용하지 않고 0을 되돌려줍니다.반환 값은 실제 읽은 바이트 수입니다. 0을 반환하면 파일의 끝에 도달했거나 읽을 수 없는 데이터를 표시하고, 파일의 읽기와 쓰기 위치는 읽은 바이트와 함께 이동합니다.추가 설명은read()가 실제 읽은 바이트 수를 순조롭게 되돌려준다면 되돌려주는 값을 매개 변수count와 비교하는 것이 좋습니다. 되돌려주는 바이트 수가 읽으려는 바이트 수보다 적으면 파일 끝을 읽거나 파이프(pipe)나 단말기에서 읽거나 read()가 신호에 의해 읽기 동작이 중단될 수 있습니다.오류가 발생하면 -1을 되돌려줍니다. 오류 코드는errno에 저장되며, 파일의 읽기와 쓰기 위치는 예상할 수 없습니다.오류 코드 EINTR 호출이 신호에 의해 중단되었습니다.EAGAIN은 I/O를 차단할 수 없는 경우(O NONBLOCK) 데이터를 읽을 수 없는 경우 이 값을 반환합니다.EBADF 매개변수 fd가 유효하지 않거나 파일이 닫혔습니다.범례는 Open () 을 참조합니다.
write
열린 파일에 데이터를 기록합니다. 관련 함수인open,read,fcntl,close,llinux에서 기본 IO시스템 함수인seek,sync,fsync,fwrite 헤더 파일unistd.h정의 함수 ssizet write(int fd, const void *buf, size_t count); 함수 설명 write () 는 매개 변수 buf가 가리키는 메모리를count 바이트로 매개 변수 fd가 가리키는 파일에 기록합니다.물론 파일 읽기와 쓰기 위치도 함께 이동한다.반환 값이 잘 되면 write () 는 실제 쓴 바이트 수를 되돌려줍니다.오류가 발생했을 때 -1을 되돌려줍니다. 오류 코드는errno에 저장됩니다.오류 코드 EINTR 호출이 신호에 의해 중단되었습니다.EAGAIN은 I/O를 차단할 수 없는 경우(O NONBLOCK) 데이터를 읽을 수 없는 경우 이 값을 반환합니다.EADF 매개변수 fd가 유효하지 않거나 파일이 닫혔습니다.예제 open()을 참조하십시오.
lseek
이동 파일의 읽기와 쓰기 위치 관련 함수 dup,open,fseek 헤더 파일sys/types.h unistd.h정의 함수 offt lseek(int fildes, off_t offset, int whence); 함수는 열려 있는 모든 파일에 읽기 및 쓰기 위치가 있음을 나타냅니다. 파일을 열 때 일반적으로 읽기 및 쓰기 위치는 파일의 시작을 가리키며, O APPEND와 같은 추가 방식으로 파일을 열면 읽기 및 쓰기 위치는 파일의 끝을 가리킵니다.read () 또는 write () 일 때 읽기와 쓰기 위치가 증가합니다. lseek () 는 이 파일의 읽기와 쓰기 위치를 제어하는 데 사용됩니다.매개 변수fildes는 열린 파일 설명어이고, 매개 변수offset은 매개 변수 whence에 따라 읽기와 쓰기 위치를 이동합니다.매개변수 whence는 SEEKSET 매개변수 offset이 새 읽기 및 쓰기 위치입니다.SEEK_CUR은 현재 읽기/쓰기 위치에서 오프셋 비트레이트를 뒤로 늘립니다.SEEK_END는 읽기 및 쓰기 위치를 파일 끝으로 지정한 다음 offset 비트레이트를 추가합니다.whence 값이 SEEK 이면CUR 또는 SEEKEND에서 매개변수 offet은 음수 값을 허용합니다.다음은 특별한 사용 방법을 가르칩니다. 1) 읽기 및 쓰기 위치를 파일의 시작으로 이동하려면: lseek(int fildes, 0, SEEK SET).2) 읽기 및 쓰기 위치를 파일 끝으로 이동하려면: lseek(int fildes, 0, SEEK END)3) 현재 파일 위치를 찾으려면: lseek(int fildes, 0, SEEK CUR);반환 값은 호출이 성공했을 때 현재 읽기와 쓰기 위치를 되돌려줍니다. 즉, 파일의 시작 몇 바이트 거리입니다.오류가 있으면 -1을 되돌려줍니다.errno는 오류 코드를 저장합니다.Linux 시스템에서 tty 기기에 lseek () 가 작동하는 것을 허용하지 않습니다. 이 동작은 lseek () 를 ESPIPE로 되돌려줍니다.범례 참조 본 함수 설명
close
파일 관련 함수 오픈, fcntl, shutdown, unlink, fclose 헤더 파일 unistd를 닫습니다.h 정의 함수 int close(int fd);함수 설명은 파일을 사용한 후 더 이상 필요하지 않으면 close () 를 사용하여 이 파일을 닫을 수 있으며, 2 close () 는 데이터를 디스크에 다시 쓰고 이 파일이 차지하는 자원을 방출합니다.매개 변수 fd는 이전에 Open () 또는 creat () 에서 되돌아온 파일 설명어입니다.반환 값은 파일이 순조롭게 닫히면 0을 반환하고 오류가 발생하면 -1을 반환합니다.오류 코드 EBADF 매개 변수 fd가 유효하지 않거나 파일이 닫혔습니다.추가 설명은 프로세스가 끝날 때 열린 파일이 자동으로 닫히지만, 파일을 닫고 되돌아오는 값을 확인하는 것이 좋습니다.샘플 참조 open()

좋은 웹페이지 즐겨찾기