嵌入式开发学习———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");
	}
	else
		ERROR_MSG("fork error");

	return 0;
}

运行结果:

2.牛客网

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值