gpt4 book ai didi

c - 如何将标准输出重定向到文件——这段代码有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:56 26 4
gpt4 key购买 nike

我在带有 433mhz 接收器的树莓派 pi2 上使用 C 程序来读取传输的代码。该程序嗅探 433mhz 代码。

要运行它,我使用以下命令:sudo ./RFSniffer 如果找到代码,程序会在控制台中显示如下内容:

收到 5204

但是,我希望能够将这些代码保存在一个文件中,所以我尝试了这个:

sudo ./RFSniffer >> codes.txt

但我的 codes.txt 文件中没有附加任何内容……我不知道为什么。我的代码有什么问题?该文件始终为空。

这是我的代码:

#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>

RCSwitch mySwitch;

int main(int argc, char *argv[]) {

int PIN = 2;

if(wiringPiSetup() == -1)
return 0;

mySwitch = RCSwitch();
mySwitch.enableReceive(PIN);

while(1) {

if (mySwitch.available()) {

int value = mySwitch.getReceivedValue();

if (value == 0) {
printf("Unknown encoding");
} else {

printf("Received %i\n", mySwitch.getReceivedValue() );
}

mySwitch.resetAvailable();

}

}

exit(0);

}

问题可能是 exit(0)printf() 而不是其他问题吗?

编辑:

该程序是使用 WiringPI 库编译的,因此有一个标志 '-lwiringPi'

该工具可在此处获得:https://github.com/ninjablocks/433Utils/tree/master/RPi_utils

编辑 2:

我将代码更改为:

int main(int argc, char *argv[]) {

printf("yeah\n");
exit(0);

}

它只适用于:

sudo sh -c './RFSniffer >> /home/pi/433Utils/RPi_utils/codes.txt'

所以问题可能是 while(1) { printf... }?或者只有在调用 exit(0) 时才写入文件?

最佳答案

您正在默认缓冲的 stdout 上写入,因为我在您的循环中看不到任何 breakreturnexit,我假设您使用 Ctrl-C 退出程序。

所有缓冲到那里的值都被简单地丢弃了。您应该在每次写入后简单地 fflush stdout 以确保收到的内容将在您的文件中结束:

 while(1) {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
printf("Unknown encoding");
} else {
printf("Received %i\n", mySwitch.getReceivedValue() );
}
fflush(stdout); // force immediate output
mySwitch.resetAvailable();
}

无论如何,必须按 Ctrl-C 退出程序并不是一件好事......

关于c - 如何将标准输出重定向到文件——这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com