open(시스템콜)
open (system call)대부분의 파일 시스템에서 프로그램은 오픈 시스템 호출을 사용하여 파일 시스템 내의 파일에 대한 액세스를 초기화합니다.이것에 의해, 파일에 관련 붙여진 자원(파일 기술자)이 할당되어 프로세스가 그 파일을 참조하기 위해서 사용하는 핸들이 반환됩니다.경우에 따라서는 첫 번째 액세스에 의해 오픈이 실행됩니다.
파일 구성 및 파일 시스템에 따라 여러 프로세스에서 동일한 파일을 동시에 열 수 있으므로 동일한 파일에 대해 여러 개의 파일 기술자가 생성됩니다.파일 포인터의 이동이나 닫기와 같은 디스크립터의 조작은 독립적이며, 같은 파일의 다른 디스크립터에는 영향을 주지 않습니다.쓰기 등의 파일 조작은 다른 디스크립터 조작으로 확인할 수 있습니다.나중에 읽으면 새로 쓴 데이터를 읽을 수 있습니다.
의 기간 동안open
파일 시스템은 버퍼에 메모리를 할당할 수도 있고 첫 번째 조작까지 대기할 수도 있습니다.
절대 파일 경로가 확인됩니다.여기에는 원격 호스트에 연결하고 운영자에게 이동식 미디어가 필요하다는 것을 알리는 작업이 포함될 수 있습니다.통신 장치의 초기화를 포함할 수 있다.이 시점에서 호스트 또는 미디어를 사용할 수 없는 경우 오류가 반환될 수 있습니다.적어도 파일 시스템내의 디렉토리에의 최초의 액세스가 실행됩니다.일반적으로 경로(디렉토리)의 상위 레벨의 컴포넌트를 찾거나 액세스할 수 없는 경우 오류가 반환됩니다.파일이 존재할 것으로 예상되지만 존재하지 않거나 파일이 존재하지 않을 경우 오류가 반환됩니다.
파일이 존재할 것으로 예상되는 경우 파일메타 데이터 또는 접근컨트롤 리스트 내의 권한 플래그에 의해 제한되는 파일접근은 요청된 조작 유형에 대해 검증됩니다.파일 시스템에 따라서는 메타 플래그가 디렉토리 구조의 일부일 수 있지만, 일반적으로 파일 시스템에 대한 추가 액세스가 필요합니다.
파일이 생성되면 파일 시스템은 파일 시스템의 기능에 따라 기본 초기 스토리지 용량 또는 지정된 용량을 할당할 수 있습니다.실패하면 오류가 반환됩니다.디렉토리를 새 엔트리로 업데이트하거나 닫을 때까지 지연될 수 있습니다.
오픈 중에 발생할 수 있는 기타 다양한 오류로는 디렉토리 업데이트 실패, 허용되지 않은 여러 연결, 미디어 장애, 통신 링크 장애 및 디바이스 장애 등이 있습니다.
반환값은 항상 검사하고 오류별 액션을 수행해야 합니다.
많은 경우 언어 고유의 런타임 라이브러리 오픈을 프로그래밍하면 파일과 관련된 런타임 라이브러리 구조의 초기화를 포함한 추가 액션을 수행할 수 있습니다.
파일이 불필요해지면, 프로그램은 파일을 닫습니다.이렇게 하면 런타임 라이브러리와 파일 시스템 버퍼가 물리적 미디어로 업데이트되고 배타적 사용이 필요한 경우 다른 프로세스가 데이터에 액세스할 수 있습니다.일부 런타임 라이브러리는 프로그램이 런타임 종료를 호출하면 파일을 닫을 수 있습니다.일부 파일 시스템은 프로그램이 종료되면 필요한 작업을 수행할 수 있습니다.커널 또는 전원 장애 발생 시 이러한 두 가지 모두 발생하지 않을 수 있습니다.이로 인해 파일 시스템 구조가 손상될 수 있으며, 파일 시스템 전체에 액세스할 수 없는 동안 특권 있고 긴 파일 시스템 유틸리티를 실행해야 합니다.
공개 모집 오디션 논쟁
- 그 file,에 대한 경로 이름.
- 접근 방법의 종류의 파일(, 쓰고, 추가 등을 읽),에 요구했다.
- 초기 파일 권한이 세번째 논쟁을 이용해 부탁 드립니다.
mode
. 이 논의될 때에만 새로운 파일이 만들어지고 있는 것은 관련이 있다.
파일을 이용한 후에, 그 과정에는 파일을 닫은 상태의 파일 설명자가 걸린다 가까운 전화를 사용하여 파일을 닫아야 합니다.어떤 특화 성향. 파일을 허용할 수도 있다.
어떤 컴퓨터 언어 특정한 특화에 대한 추가 기능성을 포함한다 런타임 라이브러리를 포함한다.개방된(또는 일부 보조 루틴)키 크기, 크기는 사상 최대, 연결 속도에 대한 사양 포함될 수 있다.일부 오픈 일은 프로그램 코드가 오류의 행사에 처형될 것의 사양을 포함한다.
Perl 언어 형식
열다. 파일 핸들,모드[,EXPR]
예를 들어 다음과 같습니다.
열다.(나의 fh달러, ">", 「출력.txt");
Perl은 또한tie
의 기능Tie::File
module을 사용하여 배열을 [1]파일에 연관짓습니다.그tie::AnyDBM_File
함수는 [2]해시를 파일에 관련짓습니다.
C 라이브러리 POSIX 정의
오픈 콜은 C 언어의 POSIX 사양에 따라 표준화됩니다.
인트 열다.(컨스턴트 차 *경로., 인트 지연., .../*,mode_t 모드 */); 인트 열려 있다(인트 fd, 컨스턴트 차 *경로., 인트 지연., ...); 인트 창조하다(컨스턴트 차 *경로., 모드_t 모드); 파일 *열리다(컨스턴트 차 *제한하다 파일명, 컨스턴트 차 *제한하다 모드);
반환되는 값은 파일 기술자로, 특히 파일 내의 어느 위치에 다음 작업이 수행될지를 나타내는 위치 포인터를 포함하는 프로세스별 구조에 대한 참조입니다.
Open이 -1을 반환할 수 있으며 이는 다음 오류와errno
에러를 상술합니다.
또한 파일 시스템은 열려 있는 모든 파일의 글로벌 테이블을 업데이트합니다.이 테이블은 파일이 현재 어떤 프로세스에서 사용되고 있는지 판별하는 데 사용됩니다.
경로.
열 파일의 이름.여기에는 파일을 찾을 수 있는 위치(또는 생성해야 하는 파일 시스템)를 정의하는 파일 경로가 포함됩니다.
openat
는 상대 패스를 상정하고 있습니다.
지연.
이 인수는 옵션 파라미터와 (<fcntl에서) OR을 조합하여 형성됩니다.h>) 다음 중 하나:
O_RDONLY
,O_RDWR
그리고.O_WRONLY
옵션 파라미터는 다음과 같습니다.
O_APPEND
작성된 데이터는 파일 끝에 추가됩니다.파일 작업은 항상 파일 끝에 위치 포인터를 조정합니다.O_CREAT
파일이 존재하지 않으면 파일을 만듭니다.생성하지 않으면 errno를 ENOENT로 설정할 수 없습니다.O_EXCL
와 함께 사용O_CREAT
파일이 이미 존재하는 경우 에러노를 EEXIST로 설정하여 실패합니다.O_TRUNC
파일이 이미 존재하는 경우 이전 내용을 삭제하고 빈 파일로 줄입니다.장치 또는 명명된 파이프에는 적용되지 않습니다.
추가 플래그 및 오류는 오픈콜로 정의됩니다.
creat()
는 다음과 같이 구현됩니다.
인트 창조하다(컨스턴트 차 *경로., 모드_t 모드) { 돌아가다 열다.(경로., O_WR만 O_CREATE O_TRUNC, 모드); }
fopen은 다음과 같은 문자열 플래그를 사용합니다.r
,w
,a
그리고.+
fgets, fputs 및 fclose와 함께 사용되는 파일 포인터를 반환합니다.
모드
옵션이며 새 파일을 만들 때만 관련되며 파일 권한을 정의합니다.여기에는 소유자, 그룹 또는 모든 사용자에 의한 파일 읽기, 쓰기 또는 실행이 포함됩니다.모드는 호출 프로세스의 umask에 의해 마스크됩니다.umask로 설정된 비트는 모드에서 클리어됩니다.
「 」를 참조해 주세요.
- 파일 디스크립터 – 파일 디스크립터의 구조 및 기타 기능
open
메모들
- ^ "Tie::File". perldoc.perl.org. Retrieved 2011-08-07.
- ^ "AnyDBM_File". perldoc.perl.org. Retrieved 2011-08-07.
레퍼런스
- W. Richard Stevens ISBN 81-7808-096-6에 의한 UNIX 환경에서의 고급 프로그래밍
- Sumitabh Das에 의한 UNIX 개념 및 응용 프로그램