linux 将一个文件分解成多个不同名文件

1.通过c直接实现

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int fileNum=0;
char fileNam[10];

char fileName(){
    fileNam[10]=0;
    fileNum += 1;
    char str[4];
    char s1[]="./image/";
    char s2[]=".yuv";
    sprintf(str,"%d",fileNum);
    sprintf(fileNam,"%s%s%s",s1,str,s2);     
}

int main(int argc,char* argv[])
{
    int fd_src,fd_dst;
    char buf[245120];
    int n;
    
    if((fd_src=open("./raw.data",O_RDONLY))<0)
    {
        perror("open src");
        exit(EXIT_FAILURE);
    }
    
    while((n=read(fd_src,buf,sizeof(buf)))>0){
        if (n != 245120)
        {
            perror("file size small");
            close(fd_src);
            exit(EXIT_FAILURE);
        }

        //lseek(fd_src,245120,SEEK_CUR);
        fileName();    
                
        if (fd_dst = open(fileNam,O_CREAT|O_WRONLY,0666)<0)
        {
            perror("open dst fail");
            close(fd_src);
            exit(EXIT_FAILURE);
        }
    
        write(fd_dst,buf,n);
    
        printf("copy successfully
");
        close(fd_dst);
        system("./move.sh");
    }
    printf("copy successfully
");
    close(fd_src);
    exit(EXIT_SUCCESS);    
}
View Code

2.通过调用system函数执行脚本

#! /bin/sh 

file_name(){
    rm ./image/1.txt
    touch ./image/1.txt
    chmod 777 ./image/1.txt
    ls -l image | cut -d ' ' -f 10 | cut -d '.' -f 1 > ./image/1.txt
    num=$(tail ./image/1.txt -n 1)
    echo "$num"
    num=$(($num+1))
    echo "$num"
}
move (){
    file_name
    mv ./image/0.yuv ./image/"$num".yuv    
}
move
View Code
原文地址:https://www.cnblogs.com/Malphite/p/7468293.html