commit 640d693922b50347b7af5350cfa43c6e5a2bbac6 Author: zhaohe Date: Wed Jun 1 19:08:38 2022 +0800 update diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6e1500 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# 文件分离程序 + +``` +概述: + 这个程序主要解决一些嵌入式系统没有 split指令,无法对大文件进行分离打包 + +Usage: + zsplit 文件名字 + @执行完之后会自动将文件分离成100M为单位大小的文件 + sumcheck + @对文件求一个sum8的和,和的结果用u32保存 + +``` + +# 编译 + +``` +export CC=gcc +./build.sh + +``` \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..cb12e17 --- /dev/null +++ b/build.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +CC=/home/zwsd/Desktop/workspace/project_meditation_capsule/HappySwitchSoundBox/toolchain/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc + +${CC} sumcheck.c -o sumcheck +${CC} zsplit.c -o zsplit \ No newline at end of file diff --git a/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/sumcheck b/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/sumcheck new file mode 100755 index 0000000..215a90b Binary files /dev/null and b/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/sumcheck differ diff --git a/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/zsplit b/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/zsplit new file mode 100755 index 0000000..38cb7fa Binary files /dev/null and b/release/v1/arm32-gcc-linaro-5.4.1.x86_64_arm-linux-gnueabihf/zsplit differ diff --git a/release/v1/x64_ubuntu2004/sumcheck b/release/v1/x64_ubuntu2004/sumcheck new file mode 100755 index 0000000..591bd39 Binary files /dev/null and b/release/v1/x64_ubuntu2004/sumcheck differ diff --git a/release/v1/x64_ubuntu2004/zsplit b/release/v1/x64_ubuntu2004/zsplit new file mode 100755 index 0000000..ae42aca Binary files /dev/null and b/release/v1/x64_ubuntu2004/zsplit differ diff --git a/sumcheck.c b/sumcheck.c new file mode 100644 index 0000000..6de60e5 --- /dev/null +++ b/sumcheck.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include + +const char *get_packet_name(const char *filename, int num) +{ + static char buf[256] = {0}; + sprintf(buf, "%s.%d", filename, num); + return buf; +} + +int main(int argc, char const *argv[]) +{ + + //打开输入文件 + + int fd = open(argv[1], O_RDONLY); + if (fd < 0) + { + perror("openfail"); + exit(-1); + } + + int fileindex = 1; + uint32_t sumcheck = 0; + uint8_t *data = malloc(100 * 1024 * 1024); + if (data == NULL) + { + perror("malloc fail"); + exit(-1); + } + + while (1) + { + + int readlen = read(fd, data, 100 * 1024 * 1024); + if (readlen <= 0) + { + printf("write end\n"); + break; + } + + for (size_t i = 0; i < readlen; i++) + { + sumcheck += data[i]; + } + + } + printf("sumcheck %d\n", sumcheck); + + return 0; +} diff --git a/zsplit.c b/zsplit.c new file mode 100644 index 0000000..f713651 --- /dev/null +++ b/zsplit.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include + +const char *get_packet_name(const char *filename, int num) +{ + static char buf[256] = {0}; + sprintf(buf, "%s.%d", filename, num); + return buf; +} + +int main(int argc, char const *argv[]) +{ + + //打开输入文件 + + int fd = open(argv[1], O_RDONLY); + if (fd < 0) + { + perror("openfail"); + exit(-1); + } + + int fileindex = 1; + uint32_t sumcheck = 0; + uint8_t *data = malloc(100 * 1024 * 1024); + if (data == NULL) + { + perror("malloc fail"); + exit(-1); + } + + while (1) + { + + int readlen = read(fd, data, 100 * 1024 * 1024); + if (readlen <= 0) + { + printf("write end\n"); + break; + } + + for (size_t i = 0; i < readlen; i++) + { + sumcheck += data[i]; + } + + // + printf("create %s(%d)\n", get_packet_name(argv[1], fileindex), readlen); + int tofd = open(get_packet_name(argv[1], fileindex), O_TRUNC | O_RDWR | O_CREAT,666); + int writenum = write(tofd, data, readlen); + if (writenum != readlen) + { + printf("Error: write fail,writenum!=readlen,%d != %d\n", writenum, readlen); + exit(0); + } + close(tofd); + fileindex++; + } + printf("sumcheck %d\n", sumcheck); + + return 0; +}