순수한 C 또는 Linux-Shell 또는 DOS-Commands가있는 초고 파일을 만드는 방법은 무엇입니까?

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

  •  08-07-2019
  •  | 
  •  

문제

내 OS와 드라이브입니다

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

그래서 SECS에서 Super-Huge 파일을 어떻게 만들 수 있습니까?

나는 매핑 파일 함수를 사용하라는 지시를 받았다. 나는 2G 이상의 파일을 만들지 못했기 때문에 ... 당신의 따뜻한 응답은 모두 감사합니다.

도움이 되었습니까?

해결책

사용 dd Linux에서 1GB 파일을 만들려면 1GB 파일을 생성하려면 느린 디스크가있는 다소로드 된 상자에서 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를 사용할 수 있습니다

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

파일이 실제 디스크 공간을 차지해야합니까? 그렇지 않은 경우 항상 (Cygwin 또는 Linux에서) :

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

이렇게하면 1 초 만에 빈 7 TB 파일이 생성됩니다. 물론 실제 디스크 공간을 많이 할당하지 않을 것입니다. 드문 파일.

Cygwin 또는 Linux에 따라 프로그램 작성을 통해 C 프로그램에서 동일한 작업을 수행 할 수 있습니다. ftruncate.

시스템 제한에 따라 1 초 만에 큰 파일을 만들 수 있습니다 ...

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

이것으로 놀아라.

cat /dev /urandom >> /home /mybigfile

디스크 공간이 다 떨어 졌을 때 오류가 발생합니다.

이것은 Linux/BSD/아마도 cgywin을위한 것입니다

VM에서 Suse에서 나는했다 dd if=/dev/zero of=file;rm file 디스크를 채우고 파일이 완전히 삭제되었을 때. 이를 통해 어떤 이유로 이미지를 조금 더 압축 할 수 있었고 어딘가에 포럼에서 그것을하는 것에 대해 읽었습니다.

Win2000/xp/7에 "fsutil"명령을 사용할 수 있습니다.

C :> fsutil 파일 CreateNew 사용법 : FSUTIL 파일 CreateNew EG : FSUTIL 파일 CreateNew C : TestFile.txt 1000

reagrds

희소 파일을 원한다면 FSCTL_SET_SPARSE 및 FSCTL_SET_ZERO_DATA와의 DeviceiofTinction을 사용하여 Windows (NTFS 볼륨)에서도 수행 할 수 있습니다. 자세한 내용은 참조하십시오 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top