[Programação do sistema Linux] 15. fcntl, lseek, truncar

Índice

FCNTL

eu procuro

parâmetro fd

deslocamento de parâmetro

parâmetro de onde

valor de retorno

Cenário de Aplicação

código de teste 1

Resultado dos testes

Código de teste 2

Resultado dos testes

ver método de arquivo

truncar

caminho do parâmetro

comprimento do parâmetro

Código de teste 3  

Resultado dos testes

FCNTL

Obtenha atributos de arquivo, modifique atributos de arquivo.

int flgs=fcntl(fd,F_GETFL);		//获取
flgs|=O_NONBLOCK;		//修改
fcntl(fd,F_SETFL,flgs);		//设置
  • F_GETFL: obtém o status do arquivo

  • F_SETFL: define o status do arquivo

eu procuro

man 2 lseek

parâmetro fd

descritor de arquivo.

deslocamento de parâmetro

Desvio.

parâmetro de onde

A posição de deslocamento inicial. SEEK_SET, SEEK_CUR, SEER_END.

valor de retorno

  • Sucesso: deslocamento da posição inicial.

  • Falha: -1.

Cenário de Aplicação

  1. A "leitura" e a "escrita" do arquivo utilizam a mesma posição de deslocamento .

  2. Use lseek para obter o tamanho do arquivo.

  3. Use lseek para expandir o tamanho do arquivo. Se você deseja que o tamanho do arquivo realmente se expanda, você deve causar operações de E/S. Você também pode usar a função truncar para expandir diretamente o arquivo.

código de teste 1

Obtenha o tamanho do arquivo.

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

int main(int argc,char *argv[]){
    int fd=open(argv[1],O_RDWR);
    if(fd==-1){
        perror("open error");
        exit(1);
    }
    int Long=lseek(fd,0,SEEK_END);
    printf("Long=%d\n",Long);
    return 0;
}

Resultado dos testes

Código de teste 2

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

int main(int argc, char *argv[])
{
    int fd = open(argv[1], O_RDWR);
    if (fd == -1)
    {
        perror("open error");
        exit(1);
    }
    int Long = lseek(fd,10, SEEK_END);		//在内容末尾偏移10个字节
    write(fd, "aaa", 3);	//追加“aaa”
    close(fd);
    return 0;
}

Resultado dos testes

 

 ^@: arquivo vazio

ver método de arquivo

Veja a representação hexadecimal do arquivo.

od -tcx 文件名
od -tcx a1.txt

 Veja a representação decimal do arquivo.

od -tcd 文件名
od -tcd a1.txt

truncar

Estenda o tamanho do arquivo. E só pode expandir o tamanho dos arquivos existentes.

man 2 truncate

caminho do parâmetro

Um arquivo ou caminho de arquivo existente.

comprimento do parâmetro

O tamanho para o qual expandir o arquivo.

Código de teste 3  

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int flag = truncate("a1.txt", 300);
    printf("flag:%d\n", flag);
    return 0;
}

Resultado dos testes

Acho que você gosta

Origin blog.csdn.net/CETET/article/details/130065686
Recomendado
Clasificación