파일에 특정 개수의 null 바이트를 어떻게 추가합니까? [닫은]


26

몇 개의 파일에 쓰는 스크립트가 있지만 특정 크기가 필요합니다. 따라서 표준 명령 줄 도구를 사용하여 파일에 특정 개수의 null 바이트를 추가하는 방법이 있는지 궁금합니다 (예 : from from from /dev/zero).


1
이 질문은 Stack Overflow에 속하는 프로그래밍에 관한 것이므로 주제가 아닌 것 같습니다 .
Jenny D는 Monica Reinstate Monica가

당신을 oflag=append위해 작동 합니까 ?
Mark K Cowan

@Mark K Cowan의 의견을 명확하게하기 위해; 그는 dd명령 을 의미합니다 .
Alexander Pozdneev

참고 fallocate로 파일에 구멍을 삽입하는 또 다른 옵션 인 것 같습니다 . superuser.com/a/1172904/111432
akostadinov

답변:


41

truncate보다 훨씬 빠릅니다 dd. 파일을 10 바이트로 늘리려면 다음을 사용하십시오.

 truncate -s +10 file.txt 

2
스파 스 파일을 생성하기 때문에 훨씬 빠릅니다. 대부분의 시간이 필요하지만 스파 스 파일을 원하지 않으면 dd 접근 방식이 효과적입니다.
derobert

34

당신도 이것을 시도 할 수 있습니다

dd if=/dev/zero bs=1 count=NUMBER >> yourfile

이것은 / dev / zero에서 읽고 NUMBER 바이트의 파일에 추가합니다.


7

아래는 dd 만 사용하여 파일에 10MB를 추가하는 예입니다.

[root@rhel ~]# cp /etc/motd ./test
[root@rhel ~]# hexdump -C test |tail -5
000003e0  0a 0a 3d 3d 3d 3d 3e 20  54 65 78 74 20 6f 66 20  |..====> Text of |
000003f0  74 68 69 73 20 6d 65 73  73 61 67 65 20 69 73 20  |this message is |
00000400  69 6e 20 2f 65 74 63 2f  6d 6f 74 64 20 3c 3d 3d  |in /etc/motd <==|
00000410  3d 3d 0a                                          |==.|
00000413

[root@rhel ~]# dd if=/dev/zero of=/root/test ibs=1M count=10 obs=1M oflag=append conv=notrunc
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0208541 s, 503 MB/s

[root@rhel ~]# hexdump -C test |tail -5
00000410  3d 3d 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |==..............|
00000420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00a00410  00 00 00                                          |...|
00a00413

5

내 첫 번째 추측은 다음과 같습니다.

dd if=/dev/zero of=myfile bs=1 count=nb_of_bytes seek=$(stat -c%s myfile)

기본적으로이 명령은 파일 끝에 dd에게 "go"를 지시하고 이전에 / dev / zero에서 읽은 바이트를 추가합니다.

문안 인사,


2
cat "your file" /dev/zero | head -c "total number of bytes"

또는

head -c "number of bytes to add" /dev/zero >> "your_file"

더 쉽게 크기를 계산하려면

head -c $(( "total number of bytes" - $(stat -c "%s" "your_file") )) /dev/zero >> "your_file"

0

null 바이트로 파일을 채우는 char *경우 C에서 파일을 조작하는 것 같습니다 .이 경우 파일을 null 바이트로 채울 필요가 없으며 끝에 null 바이트 만 추가하면됩니다 파일의 다음 임의의 바이트로 채울 수 있습니다. 이 경우 C 프로그램 벨로우즈는 매우 효율적입니다 (두 번째 매개 변수보다 작은 파일에만 사용하고 그렇지 않으면 데이터를 덮어 씁니다). lseek함수 정의에 다음과 같이 명시 되어 있으므로 원하는 것을 수행 할 수도 있습니다 (널 바이트로 채 웁니다) .

lseek () 함수는 파일 오프셋이 파일의 기존 데이터 끝을 넘어서 설정되도록합니다. 이 시점에서 데이터가 나중에 쓰여지면, 갭에서 데이터의 후속 읽기는 데이터가 실제로 갭에 쓰여질 때까지 값이 0 인 바이트를 반환합니다.

이 경우에 제 1 호 lseekwrite제거 할 수 있습니다. 그러나 테스트는 시스템에서 먼저 수행해야합니다 ...

#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

/* 1st parameter: a file name, 2nd parameter: a file size. */
int main(int argc, char ** args) {
   int nfd = open(args[1], O_WRONLY);
   lseek(nfd, 0, SEEK_END);
   write(nfd, "\0", 1);
   lseek(nfd, atoi(args[2]) - 1, SEEK_SET);
   write(nfd, "\0", 1);
   close(nfd);
   return 0;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.