Como criar um HD virtual e sistema de arquivos utilizando a linguagem C? [RESOLVIDO]

13. Re: Como criar um HD virtual e sistema de arquivos utilizando a linguagem C? [RESOLVIDO]


oxidante

(usa Debian)

Enviado em 01/04/2018 - 01:31h

phsmoura escreveu:
Como tem pessoas que nao estao entendendo minha duvida e postam comandos do linux eu vou colocar esse topico como resolvido e criar outros com minha duvida específica

O programa fallocate (comando do Linux) é feito em C e utiliza internamente as funções fallocate(), posix_fallocate() e a syscall SYS_fallocate. E é isso que vc está precisando para implementar a função criarhd(). O seu código atual cria um arquivo gigante byte por byte com fwrite(), o que demora uma eternidade! Com o código abaixo vc cria um arquivo de 512MB instanteamente:


#include <fcntl.h>
int fd, erro;
fd = open("zebra.bin", O_CREAT | O_RDWR,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd<0) puts("erro no open");
erro = posix_fallocate(fd, 0, 512*1024*1024); // aloca arquivo de 512mb no disco já inicializado com 0s
if (erro < 0) puts("erro no fallocate");
close(fd);



  


14. Re: Como criar um HD virtual e sistema de arquivos utilizando a linguagem C? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/04/2018 - 12:00h

Bem, talvez ele esteja querendo fazer usando apenas recursos portáveis da biblioteca do C. Pelo que eu lembro, ele usou recursos de <stdio.h>. Ao introduzir <unistd.h> e <fcntl.h>, o código dele já não compilaria mais no Windows, por exemplo.

Além disso, você está usando uma estratégia de prealocar todo o espaço necessário ao disco virtual. Isso não é uma necessidade estrita, embora possa ser considerada boa prática em diversas situações.

Uma alternativa válida poderia ser usar arquivos esparsos, usando ftruncate() em lugar de posix_fallocate(), para fazer com que o arquivo pareça ter os 512MiB (ou o tamanho que tiver), mas não ocupe espaço em disco até que tal espaço seja necessário.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts