文件复制(多进程实现-适合各种项目参考)

来源:互联网 发布:金银绣花线js 编辑:程序博客网 时间:2024/06/01 08:43
#include "apue.h"#define  PATH   "1.db"  void sig_alrm(int signo){printf("signo=%u pid=%u tid=%u   \n", (unsigned int )signo, (unsigned int )getpid(), (unsigned int )pthread_self());return ;}unsigned long  get_file_size(const char *path)  {      unsigned long filesize = -1;          struct stat statbuff;      if(stat(path, &statbuff) < 0)    {          return filesize;      }    else    {          filesize = statbuff.st_size;      }      return filesize;  }  int file_cp(const char *src,const char *dest){    char * buf[1024];    int len;    int fr,fd;    int ret;    fr =open(src,O_RDONLY);        perror(src);    fd = open(dest,O_WRONLY|O_CREAT) ;        perror(dest);    while( fr>0 && fd>0 )        {                memset(buf, 0, sizeof(buf));                len = read(fr, buf, sizeof(buf));                if( len  <  0 )                    {                        break;                    }                else if(len == 0)                    {                        break;                    }                ret = write(fd, buf, len);                if(ret < 0)                    {                        break;                    }        }        close(fd);                                                               close(fr);}int get_local_time(char *p){        time_t   now;        struct   tm     *timenow;                time(&now);        timenow=localtime(&now);        printf("Local time is %s/n",asctime(timenow));        asctime(timenow);}void *thread_fun(void *arg){struct sigaction act,oact;//设置信号act.sa_handler =sig_alrm;act.sa_flags = 0;sigemptyset(&act.sa_mask);sigaction(SIGALRM, &act, &oact);while(1){printf("pid=%d tid=%u\n",(int) getpid(), (unsigned int)pthread_self());unsigned long      size ;printf("3\n");//size = get_file_size(PATH);char  buf[55];strcat(buf,"_backup.db");        time_t   now;       struct   tm     *timenow;              time(&now);       timenow=localtime(&now);                printf("Local time is %s/n",asctime(timenow));strcpy(buf,(asctime(timenow)));strcat(buf,"_backup.db");printf("4\n");//buf=get_locak_time;if(size>1){printf("5\n");file_cp(PATH,buf);printf("6\n");}sleep(1);}//printf("7\n");}int main(){pthread_t thread_id;pthread_create(&thread_id, NULL, thread_fun, NULL);sleep(3);//raise(SIGALRM);//向某一进程发送信号,由进程处理pthread_kill(thread_id, SIGALRM);//向某一线程发送信号,由接受线程处理pthread_join(thread_id, NULL);//进程接受信号和线程接受信号不同}