天天看點

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");

}