嵌入式开发学习———Linux环境下IO进程线程学习(三)
time
time
是 Unix 系统中的系统调用,用于获取当前时间(秒数,从 1970 年 1 月 1 日起)。C 语言中通过 time_t time(time_t *t)
获取,常用于时间戳记录或计时。
#include <time.h>
time_t now = time(NULL); // 获取当前时间
进程
进程是程序的执行实例,拥有独立的内存空间和资源。C 语言中可通过 fork()
创建子进程,或 exec
系列函数加载新程序。进程由内核调度,每个进程有唯一的 PID。
#include <unistd.h>
pid_t pid = getpid(); // 获取当前进程 PID
fork
fork()
是创建子进程的系统调用,调用一次返回两次:父进程返回子进程 PID,子进程返回 0。父子进程代码相同,但内存独立。
#include <unistd.h>
pid_t pid = fork();
if (pid == 0) {// 子进程代码
} else {// 父进程代码
}
作业:
1.创建一个父子进程,父进程拷贝文件的前一部分,子进程拷贝文件的后一部分
#include <myhead.h>int main(int argc, const char *argv[])
{FILE *fp1=NULL,*fp2=NULL,*fp3=NULL;char buf[1024]="";fp1=fopen("./myfile","r");if(fp1==NULL)ERROR_MSG("fopen error");if(fseek(fp1,0,SEEK_END)!=0)ERROR_MSG("fseek error");int size=ftell(fp1);if(size==-1)ERROR_MSG("ftell error");if(fclose(fp1)==-1)ERROR_MSG("fclose error");pid_t pid=fork();if(pid>0){fp1=fopen("./myfile","r");if(fp1==NULL)ERROR_MSG("fopen error");fp2=fopen("./myfile1","w");if(fp2==NULL)ERROR_MSG("fopen error");for(int i=0;i<size/2+1;i++){char c=fgetc(fp1);fputc(c,fp2);}if(fclose(fp1)==-1)ERROR_MSG("fclose error");if(fclose(fp2)==-1)ERROR_MSG("fclose error");}else if(pid==0){fp1=fopen("./myfile","r");if(fp1==NULL)ERROR_MSG("fopen error");fp3=fopen("./myfile2","w");if(fp3==NULL)ERROR_MSG("fopen error");fseek(fp1,size/2+2,SEEK_SET);for(int i=0;i<size/2-1;i++){char c=fgetc(fp1);fputc(c,fp3);}if(fclose(fp1)==-1)ERROR_MSG("fclose error");if(fclose(fp3)==-1)ERROR_MSG("fclose error");}elseERROR_MSG("fork error");return 0;
}
运行结果:
2.牛客网