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");
}
else
ERROR_MSG("fork error");
return 0;
}
运行结果:
2.牛客网