如何制作进程以及它们执行不同的分配任务,例如使用fork读取文件或写入文件
how to make processes and they do different assign tasks for example doing reading from a file or writing to a file using fork
如何制作流程以及它们执行不同的分配任务。我已经写了代码
#include<iostream>
using namespace std;
int main()
int status=0;
{
for(int i=0;i<5;i++)
{
if(fork()==0)
{ cout<<"do some thing"<<endl; }
else
{wait(status); }
}
return 0;
}
这段代码创建了5个进程,但所有进程都将执行相同的操作。我希望他们做不同的任务
最简单的方法是检查fork函数返回的值,它在子进程中等于0,在父进程中等于子进程的进程ID。你可以使用这个事实来构建你的代码如下:
if (fork() == 0) //Fork a child
{
//Put child 1 code here
return 0;
}
if (fork() == 0) //Fork a child
{
//Put child 2 code here
return 0;
}
if (fork() == 0) //Fork a child
{
//Put child 3 code here
return 0;
}
if (fork() == 0) //Fork a child
{
//Put child 4 code here
return 0;
}
if (fork() == 0) //Fork a child
{
//Put child 5 code here
return 0;
}
请注意,在这里把它放在for循环中是没有意义的,因为每个孩子都有自己不同的代码,但如果你想让它适合for循环,那么你应该考虑阅读exec函数,并把你想要的代码放在不同的程序中。
祝好运
使用参数'i'。。新派生的进程可以使用case或if-then-else来调用每个进程的唯一函数。
示例:
uint32_t spinTillTime0SecChange(void)
{
uint32_t spin_count = 1; // time(0) invocation count
// no measurement, just spinning
time_t t0 = time(0);
time_t t1 = t0;
while (t0 == t1)
{
t1 = time(0);
spin_count += 1;
DTB::msPause(10); // uses usleep()
}
return(spin_count);
}
void child0(int i)
{
std::cout << "child0() start " << std::endl;
int k = 0;
time_t t0 = time(0) + 10; // spin for 10 seconds
do {
std::cout << "child0() " << i << "." << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
exit(0); // do not return
}
void child1(int i)
{
std::cout << "child1() start " << std::endl;
int k = 0;
time_t t0 = time(0) + 10; // spin for 10 seconds
do {
std::cout << "child1() " << i << "." << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
exit(0); // do not return
}
void child2(int i)
{
std::cout << "child2() start " << std::endl;
int k = 0;
time_t t0 = time(0) + 10; // spin for 10 seconds
do {
std::cout << "child2() " << i << "." << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
exit(0); // do not return
}
void child3(int i)
{
std::cout << "child3() start " << std::endl;
int k = 0;
time_t t0 = time(0) + 10; // spin for 10 seconds
do {
std::cout << "child3() " << i << "." << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
exit(0); // do not return
}
void child4(int i)
{
std::cout << "child4() start " << std::endl;
int k = 0;
time_t t0 = time(0) + 10; // spin for 10 seconds
do {
std::cout << "child4() " << i << "." << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
exit(0); // do not return
}
int main(int /*argc*/, char** /*argv[]*/ )
{
uint32_t retVal = 0;
std::cout << std::endl;
for (int i = 0; i<5; ++i)
{
pid_t childPID = fork();
if(childPID == 0) // when 0 returned: child context
{
switch (i) // from loop, choose what this child will run
{
case 0: { child0(i); } break;
case 1: { child1(i); } break;
case 2: { child2(i); } break;
case 3: { child3(i); } break;
case 4: { child4(i); } break;
default:
{
std::cerr << "out of range i: " << i << std::endl;
DTB::msPause(10); // uses usleep
}
break;
} // switch (i)
}
dtbAssert(childPID >= 0)(childPID); // error check
}
// parent context
std::cout << "parent() context after fork" << std::endl;
int k = 0;
time_t t0 = time(0) + 13; // spin for 13 seconds
do {
std::cout << "parent() " << " " << " " << k++ << std::endl;
(void)spinTillTime0SecChange();
if (time(0) == t0) break;
}while(1);
return(retVal);
}
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量