>  기사  >  운영 및 유지보수  >  Linux 운영 파일의 기본 시스템을 호출하는 방법

Linux 운영 파일의 기본 시스템을 호출하는 방법

WBOY
WBOY앞으로
2023-05-15 21:25:111607검색

Linux 운영 체제는 모든 것이 파일이라는 개념을 고수합니다. 거의 모든 파일 장치는 일련의 시스템 호출, 즉 open()/close()/write()/read() 등으로 작동할 수 있습니다. 시스템 호출은 운영 파일의 C 라이브러리 호출과 유사합니다. Linux와 함께 제공되는 매뉴얼이 가장 권위 있는 매뉴얼입니다. 매뉴얼을 확인하여 시스템 호출 사용법을 확인하십시오.

코드명—— 의미

  • 1 —— 쉘 환경에서 사용자가 조작/실행할 수 있는 명령

  • 2 —— 커널

  • 3 —— 일반적으로 사용되는 일부 함수 및 함수 라이브러리, 대부분의 C 함수 라이브러리

  • 4 —— 장치 파일에 대한 설명, 일반적으로 /dev 아래의 장치

  • 5 —— 구성 파일 또는 특정 파일의 형식

  • 6 —— 게임

  • 7 —— Linux 파일 시스템, 네트워크 프로토콜 등의 관리 및 프로토콜

  • 8 &mdash ;— 시스템 관리자가 사용할 수 있는 명령

  • 9 —— 커널 관련 파일

시스템 헤더 파일은 일반적으로 Linux 디렉토리의 /usr/include에 저장됩니다. 아래에 포함된 헤더 파일 중 일부에는 실제로 include/usr/include目录下;下面包含的一些头文件有的带了sys,其实是include底下的子目录中的头文件

open()——打开或者创建一个文件

Linux 운영 파일의 기본 시스템을 호출하는 방법

返回值类型: int——文件描述符fd,每打开一个文件,就会得到一个文件描述符,这个文件描述符是整形的,我们通过文件描述符进行读写操作。

  • 失败:-1

  • 成功:>= 0,即文件描述符;

  • mode_t是一个类型别名,实际上就是一个有符号的整数,对open函数而言,仅仅当创建新文件时才使用第三个参数

flag:打开标志

Linux 운영 파일의 기본 시스템을 호출하는 방법

注意: 这些其实都是定义的一些宏,当需要使用到多个参数时,使用按位或“ | ”构成多个flag参数

也可跟随下面的方式一起使用:

Linux 운영 파일의 기본 시스템을 호출하는 방법

Linux 운영 파일의 기본 시스템을 호출하는 방법

Linux 운영 파일의 기본 시스템을 호출하는 방법

其他不一一介绍,需要使用时自查。

write()

Linux 운영 파일의 기본 시스템을 호출하는 방법

返回值

  • 若成功为已经写入的字节数;

  • 若出错为-1;

注意:计划写入的字节数和函数的返回值不相等时,表示写入出现了错误,可以用来检验写入是否成功;

参数:

  • fd:写入文件的文件描述符;

  • buf:存放待写数据的缓存;

  • count:要求写入一次数据的字节数;

注意:

对于普通文件,写操作从文件的当前位移量处开始,若如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

read()

Linux 운영 파일의 기본 시스템을 호출하는 방법

返回值 :读到的字节数

  • 若已到文件尾为0;若出错为-1;

参数

  • fd:读取文件的文件描述符;

  • buf:存放读取数据的缓存;

  • count

    open() 아래 하위 디렉터리에 있는 헤더 파일인 sys가 포함되어 있습니다. 파일을 열거나 생성하세요
Linux 운영 파일의 기본 시스템을 호출하는 방법

반환 값 유형: int——파일 설명자 fd, 파일을 열 때마다 , 파일 설명자를 얻게 됩니다. 이 파일 설명자는 정수입니다. 파일 설명자를 통해 읽기 및 쓰기 작업을 수행합니다.

Failure: -1

Linux 운영 파일의 기본 시스템을 호출하는 방법

🎜Success: >= 0, 이는 파일 설명자입니다. 🎜🎜🎜🎜mode_t는 실제로 부호 있는 정수인 유형 별칭입니다. 세 번째 매개변수는 새 파일을 생성할 때만 사용됩니다🎜🎜🎜🎜flag: open flag🎜🎜Linux 운영 파일의 기본 시스템을 호출하는 방법🎜🎜🎜참고: 🎜 이는 실제로 정의된 일부 매크로입니다. 여러 매개변수를 사용해야 하는 경우 비트 OR "|를 사용하세요. "다중 플래그 매개변수 구성🎜🎜은 다음과 같은 방법으로도 사용할 수 있습니다: 🎜🎜 Linux 운영 파일의 기본 시스템을 호출하는 방법🎜🎜Linux 운영 파일 🎜🎜기본 시스템 호출 방법 of Linux 운영 파일 🎜🎜그 외의 내용은 하나씩 소개하지 않으니, 필요할 때 직접 확인하시기 바랍니다. 🎜🎜write()🎜🎜Linux 운영 파일의 기본 시스템을 호출하는 방법 🎜🎜🎜반환 값🎜: 🎜🎜🎜🎜성공한 경우 기록된 바이트 수입니다. 🎜🎜🎜🎜오류가 있는 경우 -1입니다. 참고: 계획된 바이트 수입니다. 함수의 반환 값과 같지 않으면 쓰기에 오류가 있다는 의미이며 쓰기 성공 여부를 확인하는 데 사용할 수 있습니다. 🎜🎜🎜🎜fd: 작성된 파일의 파일 설명자 🎜🎜🎜 🎜<code>buf: 작성할 데이터를 저장하기 위한 캐시 🎜🎜🎜🎜count: 필요한 바이트 수 🎜🎜🎜🎜🎜참고: 🎜🎜🎜 일반 파일의 경우 파일을 열 때 O_APPEND 옵션을 지정하면 파일 오프셋이 현재 오프셋으로 설정됩니다. 각 쓰기 작업 전 파일의 끝입니다. 쓰기가 성공한 후 파일 오프셋은 실제로 쓰여진 바이트 수만큼 증가합니다. 🎜🎜read()🎜🎜Linux 운영 파일의 기본 시스템을 호출하는 방법 🎜🎜🎜반환 값🎜: 읽은 바이트 수 🎜🎜🎜🎜파일 끝에 도달하면 0이고, 오류가 발생하면 -1입니다. 🎜🎜fd: 파일 읽기를 위한 파일 설명자 🎜🎜🎜🎜buf: 읽은 데이터를 저장하기 위한 캐시 🎜🎜🎜🎜count: 바이트 데이터를 한 번 읽어야 합니다. 반환 값은 읽은 실제 바이트 수이며 동일하지 않습니다. 🎜🎜🎜🎜🎜참고: 🎜읽기 작업은 파일의 🎜현재 변위🎜에서 시작됩니다. 성공적으로 반환되기 전에 변위는 실제 읽은 바이트 수만큼 증가합니다(이 변위는 직접 설정할 수 있음).

참고: 프로세스가 종료되면 프로세스가 열었던 모든 파일이 커널에 의해 자동으로 닫힙니다.

Linux 운영 파일의 기본 시스템을 호출하는 방법

참고: 이러한 캐싱 없는 함수는 모두 커널에서 제공하는 시스템 호출입니다. 이는 표준 C의 일부가 아니라 POSIX의 구성 요소입니다. .

표준 C는 FILE 구조 포인터에서 작동하여 파일 구조 포인터에서 작동하며 여기서는 파일 설명자가 사용됩니다.

파일 설명자의 범위는 0-OPEN MAX입니다. 초기 Unix에서 채택한 상한은 19였습니다(즉, 각 프로세스는 20개의 파일을 열 수 있습니다). 이제 많은 시스템이 곧 63으로 늘어날 것입니다. Linux는 1024입니다. 많은 것이 구체적인가요? 의 헤더 파일에서 찾을 수 있습니다.

Linux 운영 파일의 기본 시스템을 호출하는 방법

Linux 운영 파일의 기본 시스템을 호출하는 방법

파일 설명자 및 파일 포인터

  • FILE *fdopen(int fd, const char *mode), 파일 설명자를 파일 포인터로 변환

  • int fileno(FILE * 스트림), 파일 포인터를 파일 설명자로 변환합니다.

기능:

열린 파일 찾기

off_t lseek(int fd,off_t offset,int whence);

fd: 열린 파일에 대한 설명

  • offset: 변위량; fd:已经打开的文件描述符;

  • offset:位移量;

  • whence:定位的位置,即基准点

  • SEEK_SET:将该文件的位移量设置为距文件开始处offset个字节;

  • SEEK_CUR:将该文件的位移量设置为其当前值加offset,offset可正可负;

  • SEEK_END

  • whence: 위치 지정 위치, 즉 기준점

  • SEEK_SET: 파일의 시작 부분부터 오프셋 바이트로 파일의 오프셋을 설정합니다.

SEEK_CUR: 파일의 오프셋을 현재 값에 오프셋을 더한 값으로 설정합니다. 오프셋은 양수 또는 음수일 수 있습니다.

SEEK_END: 파일 길이에 오프셋을 더한 값으로 파일의 변위를 설정합니다. 오프셋은 양수 또는 음수일 수 있습니다(이때 양수 값인 경우 구멍 파일과 관련되어 있음). 아래 설명 참조);

Linux 운영 파일의 기본 시스템을 호출하는 방법

반환값: ** 성공하면 새 파일 변위(절대 변위)를 반환합니다. ** 오류가 발생하면 파일 끝에 위치할 때 -1입니다.

lseek 함수를 사용하여 파일 설명자가 파이프나 FIFO를 참조하는 경우 lseek는 -1을 반환하고 errno를 EPLPE로 설정합니다.

hole 파일 예:

#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>

//生成空洞文件
char *buffer = "0123456789";

int main(int argc,char *argv[])
{
	if(argc < 2)
	{
		fprintf(stderr,"-usage:%s [file]\n",argv[0]);
		exit(1);
	}

	int fd = open(argv[1],O_WRONLY | O_CREATE | O_TRUNC,0777);
	if(fd < 0)
	{
		perror("open error");
		exit(1);
	}

	size_t size = strlen(buffer) * sizeof(char);
	//将字符串写入到空洞文件中
	if(write(fd,buffer,size) != size)
	{
		perror("write error");
		exit(1);
	}
	
	//定位到文件尾部的10个字节处
	if(lseek(fd,10L;SEERK_END) < 0)
	{
		perror("lseek error");
		exit(1);
	}
	//从文件尾部的10个字节处再写入字符串
	if(write(fd,buffer,size) != size)
	{
		perror("write error");
		exit(1);
	}
	close(fd);
	return 0;
}

Linux 운영 파일의 기본 시스템을 호출하는 방법

more 명령을 사용하여 파일 내용을 보면 표시된 내용이 한 번만 작성한 결과임을 알 수 있습니다. -c 명령을 사용하여 파일의 ASSCI 코드를 보면 두 내용 사이에 10개의 내용이 있음을 알 수 있습니다.

  • 새 파일을 엽니다

  • 원본 바이너리 파일의 일부를 읽어서 새 파일에 씁니다

  • 읽기가 완료될 때까지 반복적으로 읽고 쓰기

  • 그리고 쓰기가 끝나면 중지합니다. ) == 0은 루프를 중지하는 조건으로 사용됩니다. 읽을 수 없으면 완료된 것입니다. 】

  • 완전 복사

  • Linux 운영 파일의 기본 시스템을 호출하는 방법

    복사 완료

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    파일, 포크의 하위 프로세스가 상위 프로세스와 액세스를 공유할 수 있습니까?

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    파일을 열 때마다 구조체 파일과 같은 구조가 커널에서 생성되어 열린 파일을 나타내고 다음 정보를 기록합니다.

    • 파일 오프셋(0부터 시작, 파일 포인터 오프셋 데이터가 기록됨)

    • 참조 횟수(여러 프로세스가 이 열린 파일을 사용하고 있음)

    • inode 노드(프로세스의 속성 정보 저장: 누가 생성했는지, 이름은 무엇인지, 디스크는 어디에 있는지) 저장된? 이 inode 노드를 통해 해당 특정 파일을 찾을 수 있습니다)

    • 열기 방법: 읽기 전용 모드, 쓰기 전용 모드 등

    테스트 1: 파일을 먼저 열고 포크

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    close(fd)는 가장 바깥쪽에 쓰여 있으며, 부모 프로세스와 자식 프로세스가 모두 닫힐 때마다 참조 횟수가 0이 될 때까지 1씩 감소합니다.

    실행 결과는 다음과 같습니다.

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    이유는 다음과 같습니다.

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    테스트 2: 먼저 포크한 후 파일을 엽니다

    코드를 수정한 후 실행 결과는 다음과 같이 변경됩니다. :

    Linux 운영 파일의 기본 시스템을 호출하는 방법

    부모 프로세스와 자식 프로세스가 분리되어 있기 때문에 이후에는 각각의 파일이 열리고, 각각의 구조체 파일이 생성되며, 파일 오프셋은 더 이상 공유되지 않습니다.

    실제 애플리케이션 시나리오에서는 주로 상위 프로세스와 하위 프로세스에서 연 파일을 사용하여 이 양식에 액세스합니다.

    위 내용은 Linux 운영 파일의 기본 시스템을 호출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제