You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.5 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
*
* This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
*
* Use of this source code is governed by MIT license that can be found in the
* LICENSE file in the root of the source tree. All contributing project authors
* may be found in the AUTHORS file in the root of the source tree.
*/
#include <csignal>
#include <iostream>
#include "Util/logger.h"
#include "Poller/EventPoller.h"
#include "Poller/Pipe.h"
#include "Util/util.h"
using namespace std;
using namespace toolkit;
int main() {
//设置日志 [AUTO-TRANSLATED:50372045]
// Set up logging
Logger::Instance().add(std::make_shared<ConsoleChannel>());
#if defined(_WIN32)
ErrorL << "该测试程序不能再windows下运行因为我不会windows下的多进程编程但是管道模块是可以在windows下正常工作的。" << endl;
#else
//获取父进程的PID [AUTO-TRANSLATED:0a35f39a]
// Get the parent process's PID
auto parentPid = getpid();
InfoL << "parent pid:" << parentPid << endl;
//定义一个管道lambada类型的参数是管道收到数据的回调 [AUTO-TRANSLATED:d5eeb28a]
// Define a pipe, with a lambda type parameter as the callback for when data is received
Pipe pipe([](int size,const char *buf) {
//该管道有数据可读了 [AUTO-TRANSLATED:e542256f]
// The pipe has data available for reading
InfoL << getpid() << " recv:" << buf;
});
//创建子进程 [AUTO-TRANSLATED:8d5746fc]
// Create a child process
auto pid = fork();
if (pid == 0) {
//子进程 [AUTO-TRANSLATED:3f793797]
// Child process
int i = 10;
while (i--) {
//在子进程每隔一秒把数据写入管道共计发送10次 [AUTO-TRANSLATED:5a340f4b]
// In the child process, write data to the pipe every second, for a total of 10 times
sleep(1);
string msg = StrPrinter << "message " << i << " form subprocess:" << getpid();
DebugL << "子进程发送:" << msg << endl;
pipe.send(msg.data(), msg.size());
}
DebugL << "子进程退出" << endl;
} else {
//父进程设置退出信号处理函数 [AUTO-TRANSLATED:b2a0b432]
// Parent process sets up exit signal handling function
static semaphore sem;
signal(SIGINT, [](int) { sem.post(); });// 设置退出信号
sem.wait();
InfoL << "父进程退出" << endl;
}
#endif // defined(_WIN32)
return 0;
}