我正在寫我的樹莓派一個程序,它由兩個主要部分之間的溝通:的C和PHP-計劃
-
使用Spotify的-API
- A C-計劃「Libspotify」搜索音樂並播放它。
- 一個運行在apache2-Web服務器上的PHP程序,用於控制本地網絡中PC或智能手機的Spotify程序。
這兩個獨立程序之間的通信可以通過幾個文件進行。
該C部分,用於接收用戶輸入被調用一次的第二和是這樣工作的:
void get_input() {
int i = 0, c;
FILE *file;
struct stat stat;
char buffer[INPUT_BUFFER_SIZE];
file = fopen(PATH_TO_COMMUNICATION, "r");
if (file == NULL) {
perror("Error opening PATH_TO_COMMUNICATION");
return;
}
fstat(fileno(file), &stat);
if (stat.st_size > 1) {
while((c = fgetc(file)) != EOF && i < INPUT_BUFFER_SIZE) {
buffer[i] = c;
++i;
}
buffer[i] = '\0';
parse_input(buffer);
}
fclose(file);
clear_file(PATH_TO_COMMUNICATION);
}
所以,通過在PHP fwrite()
,我可以發送命令到C-程序。
然後,C程序解析輸入並將結果寫入「結果」文件中。一旦做到這一點,我寫的「溝通」的最後一個內容-file的「last_query」 -file,所以在PHP中我可以看到,當整個結果都寫在「結果」:
function search($query) {
write_to_communication("search ".$query);
do { // Wait for results
$file = fopen("../tmp/last_query", "r");
$line = fgets($file);
fclose($file);
time_nanosleep(0, 100000000);
} while($line != $query);
echo get_result_json();
}
它已經工作了,但我不喜歡這種方式。有很多投票和不必要的打開和關閉不同的文件。此外,在最糟糕的情況下,該程序需要超過一秒鐘,直到它開始對用戶輸入進行操作。此外,當C程序嘗試在PHP程序寫入文件時嘗試讀取文件時,可能會出現競爭狀況。
所以,現在我的問題:什麼是「正確」的方式,實現兩個程序部分之間的良好和清潔的溝通?如果沒有醜陋的投票和沒有競爭條件,是否有一些完全不同的方式?還是我可以改進現有的代碼,以便它變得更好?
嗨!你必須透露這是你的圖書館。 http://meta.stackexchange.com/a/59302/155739請仔細閱讀本網站的常見問題。 –