Linux에서의 파일 I/O 프로그래밍
매개변수 1: 경로 이름, 파일이 있는 경로
매개변수 2: 프로그램 프로세스와 관련된 플래그, 파일 권한
일반적인 매크로는 다음과 같습니다: O_WRONLY,O_RDONLY,O_RDWR,O_EXCL,O_APPEND,O_DUMP
매개변수 3: 모드, 파일을 생성할 때 사용되며 일반적으로 umask 값입니다.
반환 값: 파일 설명자를 성공적으로 반환하고, 그렇지 않으면 -1을 반환합니다.
fd: 파일 설명자
buf: 쓸 데이터를 저장합니다
count: 쓰기 길이(바이트)
반환 값: 쓰기에 성공하면 쓴 문자 길이를 반환하고, 그렇지 않으면 -1을 반환한다.
fd: 파일 설명자
buf: 읽을 데이터를 저장합니다
count: 읽은 길이(바이트)
반환 값: 읽기에 성공하면 읽은 문자 길이를 반환하고, 그렇지 않으면 -1을 반환합니다.
예:
#포함
fd: 파일 설명자
offset: 오프셋할 바이트 수입니다.
whence: 그로부터의 오프셋, 매크로는 다음과 같이 정의됩니다:
SEEK_END 파일 끝
SEEK_CUR 현재 오프셋 위치
SEEK_SET 파일의 시작
참고: 오프셋이 파일 길이보다 크면 구멍이 생성됩니다. 구멍은 설정된 오프셋이 파일 끝을 초과하고 원본 파일 끝과 새 오프셋 위치 사이에 일부 데이터를 쓰기 때문에 발생합니다. .그것이 만들어진 구멍입니다. 구멍은 디스크 공간을 차지하지 않으며 사용할 수 있습니다:
예:
으아악경로명: 파일명
모드에서는 다음 매크로를 선택할 수 있습니다:
F_OK 파일이 존재하는가?
R_OK 파일에 읽기 권한이 있습니까?
X_OK 파일에 실행 권한이 있습니까
W_OK 파일에 쓰기 권한이 있나요
반환 값: 모드의 매개변수가 올바르게 충족되고 실행되면 0을 반환하고, 그렇지 않으면 -1을 반환합니다.
다음은 파일의 커널 구조에 대한 간략한 소개입니다: 먼저, 컴퓨터 시스템에는 프로세스 테이블이 있으며, 각 프로세스 테이블 항목에는 열린 파일 설명 테이블 항목이 많이 있습니다. , 각 항목에는 파일 설명자 플래그와 파일 포인터의 두 부분이 포함됩니다. 여기서 파일 포인터는 파일 테이블을 가리킵니다. 파일 테이블은 파일의 상태 플래그, 즉 읽기 가능 또는 쓰기 가능 여부와 오프셋을 저장합니다. v 노드 테이블을 가리키는 v 노드 포인터도 있습니다. v 노드 테이블은 주로 파일 소유자, 파일 길이, 파일 장치 및 위치와 같은 일련의 정보를 저장합니다. 디스크에 있는 파일의 실제 데이터 블록입니다. 어쩌면 이 설명이 명확하지 않을 수도 있으므로 그림을 사용하여 설명해 보겠습니다.
(对于以下会主要是针对的内核缓冲)由于io操作会首先将数据放入内核缓冲区,所以在写的时候如果出现系统故障则缓冲区的数据可能会丢失,所以为了防止这种情况发生,以上两个函数使得内核缓冲区的数据立即写入磁盘。
#include void sync(void);将所有缓冲排入写队列,然后立即返回 int fsync(int fd);将所有缓冲排入写队列,直到该缓冲去的数据写入磁盘后才返回。 int fdatasync(int fd);几乎和fsync函数相同,只是fdatasync(int fd)函数只影响数据部分,而fsync还会同步更新文件的属性。
#include #include int fcntl(int fd, int cmd, ... /* arg */ );
fd:文件描述符
cmd 指明该函数执行什么功能
F_DUPFD 赋值文件描述符,功能相当于dup和dup2函数。例如:
dup(fd)等价于
fcntl(fd,F_DUPFD,0)
dup2(oldfd,newfd)等价于
close(newfd);
fcntl(oldfd,F_DUPFD,newfd);
F_GETFD 的到文件描述符标志,当前之定义一个文件描述符标志,FD_CLOSEEXEC.此时第三个参数被忽视。
F_SETFD 设置文件描述符标志,设置的值是函数的第三个参数,其一般可设置为0表示关闭,1表示打开。
F_SETFL 设置文件状态标志,其值放在函数的第三个参数,和open函数第二个参数的值一样的。
F_GETFL 得到文件状态标志。此时第三个参数被忽视。
arg 可选参数,根据第二个参数填写。
返回值:出错返回-1,否则哈返达到的标志。
例如:
#include #include #include #include int main(int argc,char * argv[]) { int fd; int val=3; if( (fd = open(argv[1],O_RDWR|O_APPEND)) == -1 )//测试一下是否可以同时检测出文件的读写属性 { exit(2); } if( val = fcntl(fd,F_GETFL,0) == -1 ) { exit(1); } printf("%d\n",val); printf("%d %d %d\n",O_RDONLY,O_WRONLY,O_RDWR); int n = val & O_ACCMODE; if( n == O_RDONLY) printf("read\n"); if(O_WRONLY & val ) printf("write\n"); if( n == O_RDWR) printf("read and write\n"); }
linux中有两个级别的缓冲:IO缓冲与内核缓冲
(1)IO缓冲:对于标准IO操作,都会有一个缓冲区,当用户想要写数据时,首先将数据写入缓冲区,待缓冲区满之后才能调用系统函数写入内核缓冲区。当用户想读取数据时,首先向内核读取一定的数据放入IO缓冲区,读操作从缓冲区中读数据,当读完IO缓冲区的数据时,才能再读取数据到IO缓冲区。
目的:减少对磁盘的读写次数,提高工作效率。
(2)内核缓冲区:操作系统内核部分也有缓冲,其与IO缓冲区是不同的,其主要区别用一张图表示:
위 내용은 Linux에서의 파일 I/O 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Centos와 Ubuntu의 주요 차이점은 다음과 같습니다. Origin (Centos는 Red Hat, Enterprise의 경우, Ubuntu는 Debian에서 시작하여 개인의 경우), 패키지 관리 (Centos는 안정성에 중점을 둡니다. Ubuntu는 APT를 사용하여 APT를 사용합니다), 지원주기 (Ubuntu는 5 년 동안 LTS 지원을 제공합니다), 커뮤니티에 중점을 둔다 (Centos Conciors on ubuntu). 튜토리얼 및 문서), 사용 (Centos는 서버에 편향되어 있으며 Ubuntu는 서버 및 데스크탑에 적합), 다른 차이점에는 설치 단순성 (Centos는 얇음)이 포함됩니다.

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Docker는 Linux 커널 기능을 사용하여 효율적이고 고립 된 응용 프로그램 실행 환경을 제공합니다. 작동 원리는 다음과 같습니다. 1. 거울은 읽기 전용 템플릿으로 사용되며, 여기에는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함합니다. 2. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

Centos는 2024 년에 상류 분포 인 RHEL 8이 종료 되었기 때문에 폐쇄 될 것입니다. 이 종료는 CentOS 8 시스템에 영향을 미쳐 업데이트를 계속받지 못하게합니다. 사용자는 마이그레이션을 계획해야하며 시스템을 안전하고 안정적으로 유지하기 위해 Centos Stream, Almalinux 및 Rocky Linux가 포함됩니다.

CentOS 설치 단계 : ISO 이미지를 다운로드하고 부팅 가능한 미디어를 실행하십시오. 부팅하고 설치 소스를 선택하십시오. 언어 및 키보드 레이아웃을 선택하십시오. 네트워크 구성; 하드 디스크를 분할; 시스템 시계를 설정하십시오. 루트 사용자를 만듭니다. 소프트웨어 패키지를 선택하십시오. 설치를 시작하십시오. 설치가 완료된 후 하드 디스크에서 다시 시작하고 부팅하십시오.

CentOS 시스템 하에서 Gitlab의 백업 및 복구 정책 데이터 보안 및 복구 가능성을 보장하기 위해 CentOS의 Gitlab은 다양한 백업 방법을 제공합니다. 이 기사는 완전한 GITLAB 백업 및 복구 전략을 설정하는 데 도움이되는 몇 가지 일반적인 백업 방법, 구성 매개 변수 및 복구 프로세스를 자세히 소개합니다. 1. 수동 백업 gitlab-rakegitlab : 백업 : 명령을 작성하여 수동 백업을 실행하십시오. 이 명령은 gitlab 저장소, 데이터베이스, 사용자, 사용자 그룹, 키 및 권한과 같은 주요 정보를 백업합니다. 기본 백업 파일은/var/opt/gitlab/backups 디렉토리에 저장됩니다. /etc /gitlab을 수정할 수 있습니다

Centos Hard Disk Mount는 다음 단계로 나뉩니다. 하드 디스크 장치 이름 (/dev/sdx)을 결정하십시오. 마운트 포인트를 만듭니다 ( /mnt /newdisk를 사용하는 것이 좋습니다); 마운트 명령을 실행합니다 (mount /dev /sdx1 /mnt /newdisk); 영구 마운트 구성을 추가하려면 /etc /fstab 파일을 편집하십시오. Umount 명령을 사용하여 장치를 제거하여 프로세스가 장치를 사용하지 않도록하십시오.

Centos가 중단 된 후 사용자는 다음과 같은 조치를 취할 수 있습니다. Almalinux, Rocky Linux 및 Centos 스트림과 같은 호환되는 분포를 선택하십시오. Red Hat Enterprise Linux, Oracle Linux와 같은 상업 분포로 마이그레이션합니다. Centos 9 Stream : 롤링 분포로 업그레이드하여 최신 기술을 제공합니다. Ubuntu, Debian과 같은 다른 Linux 배포판을 선택하십시오. 컨테이너, 가상 머신 또는 클라우드 플랫폼과 같은 다른 옵션을 평가하십시오.
