순수한 C 또는 Linux-Shell 또는 DOS-Commands가있는 초고 파일을 만드는 방법은 무엇입니까?
-
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
시스템 제한에 따라 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 볼륨)에서도 수행 할 수 있습니다. 자세한 내용은 참조하십시오 여기.