linux进程重定向输出,如果将输出重定向到文件,则Linux进程行为错误(mqtt)

我开发了Linux模块,它使用TCP上的MQTT通信。

直到我编写了一个脚本来自动启动模块并将stdout和stderr重定向到一个文件,功能才有问题。

重定向之后,所有其他通信工作正常,但MQTT通信存在问题。如果我每1秒发一条信息,他们会在30多秒后突然出现。

这种奇怪的行为只有在我使用输出重定向到文件时才会发生。

我的启动脚本

/bin/su -c "/usr/local/bin/TestApp 2>&1 | awk '{ print strftime(\"%F %T TestApp:\"), \$0; fflush(); }' | tee -a /home/TestApp.txt &" - root

然后我尝试了这个(但同样的问题)

/bin/su -c "/usr/local/bin/TestApp 2>&1 | tee -a /home/TestApp.txt &" - root

所以我试过这个(同样的问题)

/usr/local/bin/TestApp 2>&1 | tee -a /home/TestApp.txt &

这个也不行

/usr/local/bin/TestApp 2>&1 > /home/TestApp.txt &

唯一没有问题的是

/usr/local/bin/TestApp 2>&1

由于输出重定向,MQTT通信行为不正常的原因是什么?

请帮忙。

编辑:添加的MQTT代码:

mqtt init函数:

int mqttInit(void) {

MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;

int rc;

MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE,NULL);

MQTTAsync_setCallbacks(client, NULL, connlost, msgarrvd, NULL);

conn_opts.keepAliveInterval = 300;//20;

conn_opts.cleansession = true;

conn_opts.onSuccess = onConnect;

conn_opts.onFailure = onConnectFailure;

conn_opts.context = client;

conn_opts.automaticReconnect = true;

if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS) {

printf("Failed to start connect, return code %d\n", rc);

rc= EXIT_FAILURE;

}

return rc;

}

接收数据时获取triggerd的函数:

int msgarrvd(void *context, char *topicName, int topicLen,MQTTAsync_message *message) {

int i;

char* payloadptr;

char temp[20];

int rc;

printf("===================\n MQTT msgarrvd: \n topic: %s \n paylength=%d \n payload=", topicName, message->payloadlen);

for (i = 0; i < message->payloadlen; i++) {

msgarrvd_Buff[i] = *payloadptr++;

printf("%02X", msgarrvd_Buff[i]);

}

printf("\n===================\n");

printf("Message arrived \r\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值