كيفية إنشاء فائقة ضخمة الملف مع خالص c أو لينكس قذيفة أو دوس الأوامر ؟

StackOverflow https://stackoverflow.com/questions/1817716

  •  08-07-2019
  •  | 
  •  

سؤال

أنظمة التشغيل و محرك

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

كيف يمكنني إنشاء سوبر ملف ضخم في ثانية

قيل لي أن استخدام MappingFile وظائف.لقد فشل في إنشاء ملفات على 2G لذا...الحارة الردود سوف تكون كل تقدير شكرا

هل كانت مفيدة؟

المحلول

وعن طريق dd في لينكس لإنشاء ملف 1 غيغابايت يأخذ 57 ثانية "الوقت ساعة الحائط 'على مربع تحميل نوعا ما مع قرص بطيئة، والوقت حوالي 17 ثواني النظام:

$ 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
$

نصائح أخرى

ويمكنك استخدام دد

dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100

وأو مجرد قذيفة البرمجة ومحتويات لا يهم

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

هل وقت آخر

while true
do
  cat bigfile >> bigfile2.txt           
  # check for size and break out..
done
rm -f dummy bigfile

هل يوجد ملف لتأخذ مساحة القرص الفعلي؟ إذا لم يكن كذلك، هل يمكن دائما (في سيغوين، أو لينكس):

dd if=/dev/zero of=bigfile seek=7T bs=1 count=1

وهذا سيخلق ملف 7 TB فارغ في جزء من الثانية. بطبيعة الحال، فإنه لن تخصيص مساحة كبيرة على القرص الفعلي: سيكون لديك .

وكتابة برنامج تحت سيغوين أو لينكس، يمكنك أن تفعل الشيء نفسه في برنامج C مع دعوة إلى <لأ href = "http://opengroup.org/onlinepubs/007908799/xsh/ftruncate.html" يختلط = "noreferrer نوفولو"> ftruncate .

واعتمادا على حدود النظام الخاص بك يمكنك إنشاء largefile في جزء من الثانية ...

FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
    fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);

ولعب مع هذا.

القط / ديف / urandom >> / الوطن / mybigfile

وسيكون خطأ خارج عندما تكون مساحة القرص قد نفدت.

وهذا هو لينكس / بي إس دي / ربما cgywin

في سوس في VM فعلت dd if=/dev/zero of=file;rm file التي تملأ القرص، وعندما كان مليئا حذف الملف. وهذا ما سمح لي لضغط الصورة أكثر قليلا لسبب ما، وأنا أقرأ عن القيام بذلك في منتدى في مكان ما.

يمكنك استخدام "fsutil" الأمر for Win2000/XP/7:

ج:> fsutil الملف createnew الاستخدام :fsutil الملف createnew على سبيل المثال :fsutil الملف createnew C: estfile.txt 1000

Reagrds

إذا كنت ترغب في ملف متفرق يمكنك أن تفعل ذلك أيضا على ويندوز (على وحدات تخزين NTFS)، وذلك باستخدام CreateFile، DeviceIOFunction مع FSCTL_SET_SPARSE وFSCTL_SET_ZERO_DATA. لمزيد من المعلومات انظر هنا .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top