Skip to main content

리눅스 명령 및 유닉스 명령 열기

리눅스 vi 명령어 (기초) (유월 2026)

리눅스 vi 명령어 (기초) (유월 2026)
Anonim

개요

#포함 #포함 #포함 int open (const char * 경로 이름 , int 깃발 ); int open (const char * 경로 이름 , int 깃발 , mode_t 방법 ); int creat (const char * 경로 이름 , mode_t 방법 );

기술

그만큼열다() 시스템 호출 linux 명령은 경로명을 파일 설명자 (후속 입출력에서 사용하기위한 작고 음이 아닌 정수)로 변환하는 데 사용됩니다 독서, 쓰다, 등). 호출이 성공하면, 파일 디스크립터는 프로세스를 위해 현재 열지 않은 가장 낮은 파일 디스크립터가된다. 이 호출은 다른 프로세스와 공유되지 않는 새로운 열린 파일을 작성합니다. (그러나 공개 된 공유 파일은포크(2) 시스템 콜을 참조하십시오.) 새로운 파일 디스크립터는 exec 함수를 통해 열린 채로 유지됩니다 (fcntl(2) 참조). 파일 오프셋은 파일의 시작 부분으로 설정됩니다.

매개 변수 깃발 중 하나이다O_RDONLY, O_WRONLY 또는O_RDWR 이 명령은 파일 읽기 전용, 쓰기 전용 또는 읽기 / 쓰기를 각각 열 것을 요청하며, 또는 다음 중 0 개 이상을 사용하십시오.

O_CREAT

파일이 존재하지 않으면 생성됩니다. 파일의 소유자 (사용자 ID)는 프로세스의 유효 사용자 ID로 설정됩니다. 그룹 소유권 (그룹 ID)은 프로세스의 유효 그룹 ID 또는 상위 디렉토리의 그룹 ID로 설정됩니다 (파일 시스템 유형 및 마운트 옵션 및 상위 디렉토리의 모드에 따라 다름). 예를 들어 마운트 옵션들 bsdgroups 과 sysvgroups ext2 파일 시스템의(8)).

O_EXCL

와 함께 사용할 때O_CREAT, 파일이 이미 존재하면 그것은 오류이며열다 실패 할 것이다. 이 문맥에서, 그것의 가리키는 곳과 관계없이 심볼릭 링크가 존재한다.O_EXCL NFS 파일 시스템에서 잠금이 발생하면 잠금 작업을 수행하는 데 사용되는 프로그램에 경쟁 조건이 포함됩니다. lockfile을 사용하여 원자 파일 잠금을 수행하는 솔루션은 동일한 fs (예 : 호스트 이름 및 PID 통합)에 고유 파일을 작성하고 link (2)를 사용하여 lockfile에 대한 링크를 작성하는 것입니다. 만약링크() 0을 반환하면 잠금이 성공적으로 수행됩니다. 그렇지 않으면 합계(2)를 사용하여 고유 파일에 링크 카운트가 2로 증가했는지 확인합니다.이 경우 잠금도 성공적입니다.

O_NOCTTY

만약 경로 이름 터미널 장치를 참조하십시오.티티(4) --- 프로세스에 제어 권한이없는 경우에도 프로세스의 제어 터미널이되지 않습니다.

O_TRUNC

파일이 이미 존재하고 일반 파일이고 열기 모드가 쓰기를 허용하는 경우 (즉, O_RDWR 또는 O_WRONLY 인 경우) 길이가 0으로 절단됩니다. 파일이 FIFO 또는 터미널 장치 파일 인 경우 O_TRUNC 플래그는 무시됩니다. 그렇지 않으면 O_TRUNC의 효과가 지정되지 않습니다. (많은 리눅스 버전에서는 무시 될 것이고 다른 버전에서는 에러를 리턴 할 것입니다.)

O_APPEND

파일이 추가 모드로 열립니다. 각각 전에쓰다, 파일 포인터는 파일의 끝에 위치합니다.일선. O_APPEND 둘 이상의 프로세스가 한 번에 파일에 데이터를 추가하면 NFS 파일 시스템에서 손상된 파일로 이어질 수 있습니다. 이는 NFS가 파일에 추가를 지원하지 않기 때문에 클라이언트 커널이이를 시뮬레이션해야하기 때문에 경쟁 조건 없이는 수행 할 수 없습니다.

O_NONBLOCK 또는O_NDELAY

가능한 경우 파일이 비 차단 모드로 열립니다. 둘 다열다 리턴 된 파일 기술자에 대한 후속 작업도 호출 프로세스를 대기하게합니다. FIFO (명명 된 파이프) 처리에 대해서는 다음을 참조하십시오.FIFO(4). 이 모드는 FIFO가 아닌 다른 파일에 영향을 줄 필요가 없습니다.

O_SYNC

동기 I / O를 위해 파일이 열립니다. 어떤쓰다s는 결과 파일 디스크립터에서 데이터가 물리적으로 기본 하드웨어에 기록 될 때까지 호출 프로세스를 차단합니다. 아래 제한 사항을 참조하십시오.

O_NOFOLLOW

만약 경로 이름 기호 연결 고리이면 열기가 실패합니다. 이것은 2.1.126 버전의 Linux에 추가 된 FreeBSD 확장입니다. 경로 이름의 이전 구성 요소에있는 기호 링크는 계속됩니다. glibc 2.0.100 이후의 헤더에는이 플래그의 정의가 포함됩니다. 2.1.126 이전의 커널은 사용하는 경우이를 무시합니다. .

O_DIRECTORY

만약 경로 이름 디렉토리가 아니기 때문에 open이 실패하게됩니다. 이 플래그는 Linux에 고유하며 커널 버전 2.1.126에 추가되어 다음 경우에 서비스 거부 문제를 피할 수 있습니다.opendir(3) FIFO 또는 테이프 장치에서 호출되지만 구현 외부에서 사용하면 안됩니다.opendir.

O_DIRECT

이 파일과의 I / O의 캐시 효과를 최소화하십시오. 일반적으로 이것은 성능을 저하 시키지만 응용 프로그램이 자체 캐싱을 수행하는 경우와 같은 특별한 상황에서 유용합니다. 파일 I / O는 사용자 공간 버퍼에서 직접 수행됩니다. I / O는 동기식입니다. 즉, 독서(2) 또는쓰다(2) 시스템 호출, 데이터 전송이 보장됩니다. 전송 크기 및 사용자 버퍼와 파일 오프셋의 정렬은 모두 파일 시스템의 논리 블록 크기의 배수 여야합니다.이 플래그는 여러 유닉스 계열 시스템에서 지원됩니다. 커널 버전 2.4.10의 Linux에서 지원이 추가되었습니다.블록 장치에 대한 의미 론적으로 유사한 인터페이스는노골적인(8).

O_ASYNC

신호를 생성합니다 (기본적으로 SIGIO이지만 이것은을 통해 변경할 수 있습니다).fcntl(2))이 파일 디스크립터에서 입력 또는 출력이 가능해질 때. 이 기능은 터미널, 유사 터미널 및 소켓에서만 사용할 수 있습니다. 만나다fcntl(2)를 참조하십시오.

O_LARGEFILE

대용량 파일 시스템을 지원하는 32 비트 시스템에서 크기를 31 비트로 표현할 수없는 파일을 열 수 있습니다.

이러한 선택적 플래그 중 일부는 다음을 사용하여 변경할 수 있습니다.fcntl 파일을 연 후에.

논쟁 거리 방법 새 파일을 만들 때 사용할 권한을 지정합니다. 프로세스에 의해 수정됩니다.umask 일반적인 방법 : 생성 된 파일의 사용 권한은 다음과 같습니다.(모드 & ~ umask). 이 모드는 새로 생성 된 파일의 향후 액세스에만 적용됩니다. 그만큼열다읽기 전용 파일을 만드는 호출은 읽기 / 쓰기 파일 설명자를 반환 할 수 있습니다.

다음과 같은 기호 상수가 제공됩니다. 방법 :

S_IRWXU

00700 사용자 (파일 소유자)에게 읽기, 쓰기 및 실행 권한이 있습니다.

S_IRUSR (S_IREAD)

00400 사용자에게 읽기 권한이 있습니다.

S_IWUSR (S_IWRITE)

00200 사용자에게 쓰기 권한이 있습니다.

S_IXUSR (S_IEXEC)

00100 사용자에게 실행 권한이 있습니다.

S_IRWXG

00070 그룹에 읽기, 쓰기 및 실행 권한이 있습니다.

S_IRGRP

00040 그룹에 읽기 권한이 있습니다.

S_IWGRP

00020 그룹에 쓰기 권한이 있습니다.

S_IXGRP

00010 그룹에 실행 권한이 있습니다.

S_IRWXO

00007 다른 사용자는 읽기, 쓰기 및 실행 권한이 있습니다.

S_IROTH

00004 다른 사용자에게 읽기 권한이 있습니다.

S_IWOTH

00002 다른 사용자에게 쓰기 권한이 있습니다.

S_IXOTH

00001 다른 사용자에게 실행 권한이 있습니다.

방법 언제 지정해야합니까?O_CREAT 에 깃발 그렇지 않으면 무시됩니다.

creat ~에 해당합니다.열다 와 깃발 동일O_CREAT | O_WRONLY | O_TRUNC.

반환 값

열다creat 새로운 파일 기술자를 돌려 주어, 에러가 발생했을 경우는 -1 (이 경우, 오류 적절하게 설정 됨). 유의 사항열다 장치 특수 파일을 열 수 있지만creat 그들을 만들 수 없다.mknod(2) 대신에.

UID 맵핑이 사용 가능한 NFS 파일 시스템에서,열다 파일 기술자를 반환 할 수 있습니다. 독서(2) 요청이 거부되었습니다.EACCES. 이는 클라이언트가열다 사용 권한을 확인하여 UID 맵핑이 읽기 W 쓰기 요청시 서 v에 의해 수행됩니다.

파일이 새로 작성되면 atime, ctime, mtime 필드는 현재 시간으로 설정되고 상위 디렉토리의 ctime 및 mtime 필드도 설정됩니다. 그렇지 않으면 O_TRUNC 플래그로 인해 파일이 수정되면 ctime 및 mtime 필드가 현재 시간으로 설정됩니다.

오류

EEXIST

경로 이름 이미 존재하고O_CREATO_EXCL 사용 된.

아이 디스

경로 이름 디렉토리를 말하며, 요청 된 액세스는 관련된 쓰기 (즉,O_WRONLY 또는O_RDWR 설정 됨).

EACCES

요청 된 파일 액세스가 허용되지 않았거나, 경로 이름 검색 (실행) 권한을 허용하지 않았거나 파일이 아직 존재하지 않고 상위 디렉토리에 대한 쓰기 권한이 허용되지 않습니다.

ENAMETOOLONG

경로 이름 너무 깁니다.

ENOENT

O_CREAT가 설정되지 않았고 명명 된 파일이 존재하지 않습니다. 또는에있는 디렉토리 구성 요소 경로 이름 존재하지 않거나 매달린 심볼릭 링크입니다.

ENOTDIR

디렉토리로 사용되는 구성 요소 경로 이름 사실, 디렉토리가 아닙니다.O_DIRECTORY지정되었습니다. 경로 이름 디렉토리가 아니 었습니다.

ENXIO

O_NONBLOCK | O_WRONLY가 설정되고, 명명 된 파일은 FIFO이며 읽기를 위해 파일을 열지 않은 프로세스가 없습니다. 또는 파일이 장치 특수 파일이고 해당 장치가 없습니다.

ENODEV

경로 이름 장치 특수 파일을 참조하며 해당 장치가 없습니다. (이것은 Linux 커널 버그입니다.이 상황에서는 ENXIO가 반환되어야합니다.)

EROFS

경로 이름 읽기 전용 파일 시스템의 파일을 참조하고 쓰기 액세스가 요청되었습니다.

ETXTBSY

경로 이름 현재 실행되고 있고 쓰기 권한이 요청 된 실행 가능 이미지를 나타냅니다.

EFAULT

경로 이름 액세스 가능한 주소 공간 외부를 가리 킵니다.

ELOOP

해결시 너무 많은 심볼릭 링크가 발생했습니다. 경로 이름 , 또는O_NOFOLLOW 지정되었지만 경로 이름 상징적 인 링크 였어.

ENOSPC

경로 이름 생성 된 장치가 포함 된 장치 경로 이름 새 파일을 저장할 공간이 없습니다.

ENOMEM

불충분 한 커널 메모리를 사용할 수있었습니다.

EMFILE

프로세스에 이미 최대 수의 파일이 열려 있습니다.

ENFILE

시스템에서 열린 파일의 총 수에 대한 한계에 도달했습니다.

준수

SVr4, SVID, POSIX, X / OPEN, BSD 4.3.O_NOFOLLOWO_DIRECTORY 플래그는 Linux에 따라 다릅니다. 하나는_GNU_SOURCE 매크로를 사용하여 정의를 가져옵니다.

제한 사항

NFS를 기반으로하는 프로토콜에는 많은 정보가 있으며, 다른 것들은 영향을받습니다O_SYNCO_NDELAY.

POSIX는 플래그에 해당하는 동기화 된 I / O의 세 가지 변형을 제공합니다O_SYNC , O_DSYNCO_RSYNC. 현재 (2.1.130) 이들은 모두 Linux에서 동의어입니다.