测试linux程序打印输出重定向buffer大小
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试linux程序打印输出重定向buffer大小相关的知识,希望对你有一定的参考价值。
程序打印输出重定向到文件时,有buffer限制,比如之前在海康那个系统下,是4096字节,只有攒满这么多字节,才会往文件输出一次
现在我们测试在ubuntu20.04下,这个数值是多少
文章目录
问:帮我写一个linux c++程序,这个程序会将所有输出重定向到一个.log文件,同时程序中有一个while循环,当检测到这个.log文件大小变化时,打印这个.log文件的大小(好像不对,我需求搞错了)
#include <iostream>
#include <fstream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
using namespace std;
// 将标准输出重定向到指定的文件
void ky_redirect_output(const char *filePath)
int fd = 0;
// 以追加的方式打开文件
fd = open(filePath, O_CREAT | O_RDWR | O_APPEND, 0777);
if (fd == -1)
return;
// 重定向标准输出到文件
dup2(fd, STDOUT_FILENO);
close(fd);
int main()
// 重定向标准输出到test.log文件
ky_redirect_output("test.log");
int oldSize = 0;
while (true)
// 获取文件大小
struct stat st;
if (stat("test.log", &st) == 0)
int newSize = st.st_size;
// 如果文件大小改变,则打印文件大小
if (newSize != oldSize)
cout << "file size is: " << newSize << endl;
oldSize = newSize;
// 每隔1秒检测一次
sleep(1);
return 0;
问:帮我写一个linux c++程序,这个程序会每毫秒打印1字节长度的信息,同时程序中有一个while循环,每毫秒会检测一个.log文件的大小,如果这个.log文件大小发生变化时,打印这个.log文件的大小。程序的输出不要重定向到.log文件。
(print)
#include <iostream>
#include <fstream>
#include <chrono>
//#include <thread>
#include <unistd.h>
int main()
while (true)
//std::cout << "Print 1 byte info every millisecond." << std::endl;
std::cout << "b" << std::endl;
usleep(1000);
//std::this_thread::sleep_for(std::chrono::milliseconds(1));
return 0;
(check)
#include <iostream>
#include <fstream>
#include <chrono>
#include <thread>
int main()
std::string logFileName = ".log";
std::ifstream logFile(logFileName.c_str(), std::ios::binary);
unsigned long long lastSize = 0;
while (true)
unsigned long long currentSize = 0;
logFile.seekg(0, logFile.end);
currentSize = logFile.tellg();
if (lastSize != currentSize)
std::cout << "Log file size changed to: " << currentSize << std::endl;
lastSize = currentSize;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
return 0;
编译:
g++ print.cpp -o print
g++ check.cpp -o check
./print > .log 2>&1 &
./check
然后发现每两字节就会打印一下…估计是把\\n
也计算进去了
.log
这跟CH的python程序不符啊,,他的那个要结束才输出到文件中,不知道怎么回事
以上是关于测试linux程序打印输出重定向buffer大小的主要内容,如果未能解决你的问题,请参考以下文章