前言
在bash代码中,看到关闭了一个fd后,屏幕上才出现linux命令执行后的回显内容.
做了一个试验,实现了回显数据的捕获。
实现思路:
dup2重定向stdin到自己建立的管道
select管道,如果有数据就读取管道中的数据,并转发. 如果超时,就跳出.
做了好久的试验,终于达到预期的效果了:)
demo
// @file main.cpp
// @note on fedora22 view syslog use 'journalctl -f'
// 'tail -f /var/log/message' is invalid
#include
#include
#include
#include
#include
#include
#include
#include
#include
// 日志级别 - 调试
#ifndef MYLOG_D
#define MYLOG_D(fmt, ...) \
do { \
syslog(LOG_INFO, "[%s : %s.%d : %s()] : " fmt, "LS_LOG", __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
} while (0);
#endif // #ifndef MYLOG_D
void init(const char* psz_log_owner_name);
void uninit();
void proc_sig_term(int num);
int fn_test();
int main(int argc, char** argv)
{
char sz_buf[1024] = {'\0'};
#ifdef MAKE_FILE_MACRO__BIN_NAME
sprintf(sz_buf, "%s", MAKE_FILE_MACRO__BIN_NAME);
init(sz_buf);
MYLOG_D("MAKE_FILE_MACRO__BIN_NAME = [%s]", MAKE_FILE_MACRO__BIN_NAME);
#else
init(NULL);
#endif