【Linux下C】Linux下多进程轮流写文件

由于时间紧张和学识有限,代码定有不足之处(后面会抽时间优化)大佬勿笑~😀
如果需要帮助或有任何建议,加我qq:2287015934

需求

程序中包括两个进程,P1和P2。它们分别向一个文件,轮流写入字符串。
例如:P1写入字符串“XXXXXX”,P2写入字符串“YYYYYY”。
关键词功能是轮流写入,P1写完后必须P2写,P2写完后必须P1写。

实现思路

我们利用fork函数可以创建一个子进程,假设我们先让子进程写文件,此时父进程不得写文件,怎么实现呢?
linux中的wait(函数)可以实现父进程等待子进程的死亡再执行。
根据这个思路可以写出伪代码:

while(true){
       创建子进程;
	if(子进程){"I am child."到文件
	}
	if(父进程){
	   wait()
	   写文件
	}
}

循环开始时父进程陷入等待,子进程写完以后父进程才能写文件,然后下一次循环子进程再次写文件。

演示动图

在这里插入图片描述

源码

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <dirent.h>
#include <signal.h>
using namespace std;
void UI();
char despath[200];
int main(){
	UI();
    pid_t pid;
	int cnt2=0;
	while(1){
	    pid=fork();
		if(pid<0){
			cout<<"error"<<endl;
		}
		else if(pid==0){
	        FILE* ch_fp=fopen(despath,"a");
			char buf[200];
			fprintf(ch_fp,"%s","child\n");
            printf("子进程向%s写入了child\n",despath);
			sleep(1);
			fclose(ch_fp);
			exit(0);
		}
		else{
			wait(NULL);
			FILE* pa_fp=fopen(despath,"a");
			char buf[200];
			fprintf(pa_fp,"%s","parent\n");
			printf("父进程向%s写入了parent\n",despath);
            fclose(pa_fp);
			sleep(1);
		}
	}
    return 0;
}
void UI(){
         printf("----------本程序实现了基于fork的多进程轮流写文件----------\n");
		 printf("      父子进程将轮流写入\"parent\"和\"child\"             \n");
         printf("      您可以自定义目标文件的路径                          \n");
		 printf("      请给出目标文件的路径:                               \n");
		 scanf("%s",despath);
}

使用g++编译运行即可。

联系方式

如果需要帮助或有任何建议,加我qq:2287015934

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于Linux系统进程控制的毕业设计,我可以给您提供一些思路和建议,希望能对您有所帮助。 1. 系统进程管理器设计 首先,您可以设计一个系统进程管理器,该管理器可以实现以下功能: - 实时监测系统中运行的进程,包括进程的PID、状态、CPU占用率、内存占用率等信息。 - 支持进程的启动、停止、重启、暂停、恢复等操作。 - 支持进程优先级的调整,可以让用户自行设置进程的优先级。 - 支持进程的监控和日志记录,方便用户对进程的运行状态进行监测和分析。 - 支持进程的自动重启和自动恢复功能,可以在进程异常退出或崩溃时自动重启或恢复进程。 2. 进程间通信设计 其次,您可以设计一些进程间通信的机制,以便实现不同进程之间的数据共享和交互。以下是一些常见的进程间通信机制: - 管道(Pipe):可以在父进程与子进程之间传递数据。 - 消息队列(Message Queue):可以在多个进程之间传递消息。 - 共享内存(Shared Memory):可以让多个进程共享同一块内存区域。 - 信号量(Semaphore):可以控制多个进程对共享资源的访问。 - 套接字(Socket):可以在不同的主机和进程之间进行通信。 您可以根据具体需求选择不同的进程间通信机制,或者结合多种机制来实现您的进程控制系统。 3. 进程调度算法设计 最后,您可以设计一些进程调度算法,以便让您的进程控制系统更加智能化和高效化。以下是一些常见的进程调度算法: - 先来先服务(FCFS):按照进程到达时间的先后顺序进行调度。 - 短作业优先(SJF):按照进程执行时间的短长顺序进行调度。 - 优先级调度(Priority Scheduling):按照进程的优先级进行调度,优先级越高的进程越先执行。 - 时间片轮转(Round Robin):将CPU时间分成若干个时间片,轮流分配给不同的进程,每个进程执行一个时间片后就切换到下一个进程。 - 多级反馈队列调度(Multi-level Feedback Queue Scheduling):将进程按照优先级分成多个队列,每个队列有不同的时间片长度和优先级,进程可以在不同的队列之间移动。 您可以根据具体需求选择不同的进程调度算法,或者结合多种算法来实现您的进程控制系统。 希望以上的建议能对您有所帮助,如果您有任何问题或需要进一步的帮助,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民真快落

我琢磨着也没人给我打赏呀。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值