Comment créer un fichier super-énorme avec pure c ou linux-shell ou dos-orders?
-
08-07-2019 - |
Question
Mon système d'exploitation et mon lecteur sont
OS: Windows XP sp2 or Linux SUSE 9 or Cygwin
Compiler: Visual C++ 2003 or Gcc or Cygwin
PC and os are both 32 bits
Alors, comment puis-je créer un fichier super énorme en quelques secondes
On m'a dit d'utiliser les fonctions MappingFile. J'ai échoué à créer des fichiers sur 2G Alors... Vos réponses chaleureuses seront toutes appréciées merci
La solution
L'utilisation de dd
sous Linux pour créer un fichier de 1 Go prend 57 secondes «d'heure murale» sur une boîte quelque peu chargée avec un disque lent et environ 17 secondes de temps système:
$ time dd if=/dev/zero of=bigfile bs=G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 53.9903 s, 19.9 MB/s
real 0m56.685s
user 0m0.008s
sys 0m17.113s
$
Autres conseils
vous pouvez utiliser dd
dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100
ou tout simplement les scripts shell et leur contenu n'a pas d'importance
1) create a dummy file with a few lines, eg 10 lines
2) use cat dummy >> bigfile in a while loop
eg
while true
do
cat dummy >> bigfile.txt
#check for number of lines more than 10000 for example and break out of loop
done
Faire une autre fois
while true
do
cat bigfile >> bigfile2.txt
# check for size and break out..
done
rm -f dummy bigfile
Le fichier doit-il occuper réellement l’espace disque? Sinon, vous pouvez toujours (sous Cygwin ou Linux):
dd if=/dev/zero of=bigfile seek=7T bs=1 count=1
Ceci créera un fichier vide de 7 To en une fraction de seconde. Bien sûr, cela n'allouera pas beaucoup d'espace disque réel: vous aurez un gros fichier fragmenté .
En écrivant un programme sous Cygwin ou Linux, vous pouvez faire la même chose dans un programme C avec un appel à ftruncate .
En fonction des limites de votre système, vous pouvez créer un fichier volumineux en une fraction de seconde ...
FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);
Jouez avec cela.
cat / dev / urandom > > / home / mybigfile
Il y aura une erreur lorsque l'espace disque sera épuisé.
Ceci est pour linux / bsd / éventuellement cgywin
Dans une machine virtuelle, j’ai fait dd if = / dev / zero de fichier = fichier; fichier rm
qui remplissait le disque et le supprimait quand il était plein. Cela m'a permis de compresser un peu plus l'image pour une raison quelconque, et j'ai appris à le faire quelque part sur un forum.
Vous pouvez utiliser " fsutil " commande pour Win2000 / XP / 7:
c: > fsutil création de fichier Utilisation: fsutil createnew Exemple: fichier fsutil createnew C: \ testfile.txt 1000
Résultats
Si vous voulez un fichier fragmenté, vous pouvez également le faire sous Windows (sur des volumes NTFS), en utilisant CreateFile, DeviceIOFunction avec FSCTL_SET_SPARSE et FSCTL_SET_ZERO_DATA; Pour plus d'informations, consultez ici .