Índice
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
A "leitura" e a "escrita" do arquivo utilizam a mesma posição de deslocamento .
Use lseek para obter o tamanho do arquivo.
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;
}