我有兩個 cpp 檔案,我希望其中一個能夠告訴我在另一個 C 檔案中宣告的某些特定變數的值。例如:
檔案1.cpp
int var1 = 10;
while (true) {std::cin >> var1;}
我想要另一個 cpp 檔案 file2.cpp,在編譯時能夠告訴我 file1->var1 的值。
現在,我意識到我可以使用檔案來存盤值并讀取它,但這似乎不是“正確”的方法,那么正確的方法是什么(也許將它存盤在 RAM 中的特定位置?)
編輯:由于有人問,這兩個 cpp 檔案都將單獨編譯。它們將成為獨立的可執行檔案。
uj5u.com熱心網友回復:
您可以使用所謂的命名管道作為解決方案,將程式 1 與程式 2 連接起來。命名管道,因其行為也稱為 FIFO,可用于連接兩個不相關的行程,并且獨立于行程而存在;這意味著即使沒有人使用它,它也可以存在。FIFO 是使用 mkfifo() 庫函式創建的。
例子
作家.c
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int fd;
char * myfifo = "/tmp/myfifo";
/* create the FIFO (named pipe) */
mkfifo(myfifo, 0666);
/* write "Hi" to the FIFO */
fd = open(myfifo, O_WRONLY);
write(fd, "Hi", sizeof("Hi"));
close(fd);
/* remove the FIFO */
unlink(myfifo);
return 0;
}
閱讀器
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#define MAX_BUF 1024
int main()
{
int fd;
char * myfifo = "/tmp/myfifo";
char buf[MAX_BUF];
/* open, read, and display the message from the FIFO */
fd = open(myfifo, O_RDONLY);
read(fd, buf, MAX_BUF);
printf("Received: %s\n", buf);
close(fd);
return 0;
}
編輯:抱歉,我注意到您需要 C 語言,您可以在此處找到 C 語言的代碼Create Named Pipe C Windows
uj5u.com熱心網友回復:
問:如何在兩個獨立的行程之間傳遞資訊(用 C 撰寫)?
答:使用IPC:
https://en.wikipedia.org/wiki/Inter-process_communication
在計算機科學中,行程間通信或行程間通信 (IPC) 特指作業系統提供的允許行程管理共享資料的機制。通常,應用程式可以使用 IPC,分為客戶端和服務器,其中客戶端請求資料,服務器回應客戶端請求。
正如本文所討論的,行程可以通過多種方式進行通信。許多是特定于平臺的。僅舉幾例:
- 共享檔案/共享檔案夾
- 管道
- 命名管道
- TCP/IP 套接字
- 訊息佇列
- 共享記憶體
- 等等等等。
你需要問的一些問題:
- 我是否需要在行程之間進行通信,或者只是在同一行程中的執行緒之間共享資訊?
- 在同一臺主機上的不同行程之間進行通信,還是需要在主機之間進行通信?
- 該解決方案是否應該可移植到不同的作業系統(例如在 Windows、Linux 和 MacOS 上作業)?
- 我會從第 3 方框架或庫中受益嗎?
- 等等等等。
沒有“正確的方法”;沒有“一刀切”的解決方案。
請提供有關您的“用例”和“約束”的更多詳細資訊,以便我們為您提供更明智的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368667.html
上一篇:C :由常量參考傳遞的變數更改值
下一篇:從嵌套字典中列印兩位數
