在 Linux 中,您可以使用 C 共享記憶體來儲存指標嗎?

發布 科技 2024-03-04
9個回答
  1. 匿名使用者2024-02-06

    man shmget 以及 shmat(2), shmctl(2), shmdt(2)。

    如果操作可以參考。

    開始 Linux 程式設計,共享記憶體的第 4 個示例。

  2. 匿名使用者2024-02-05

    誤差對比不明顯,最重要的誤差是int shmid=shmget(key,4,ipc creat|ipc_excl|0660);這一行的標誌位 ipc excl 確保建立了乙個新的唯一共享記憶體,如果它已經存在(即之前使用過一次),它將返回乙個錯誤,所以這個標誌位被刪除,其餘的不是很嚴重,忽略了共享記憶體最後沒有被刪除, 但只分離了共享記憶體。修改 ** 如下:

    #include

    #include

    #include

    #include

    #include

    int main()

    key_t key=ftok(".",100);

    if(key==-1){

    perror("ftok");

    return -1;

    int shmid=shmget(key,0,0);

    if(shmid==-1)

    perror("shmget");

    exit(-1);

    void*p=shmat(shmid,0,0);

    if(p==(void*)-1)

    perror("shmat");

    exit(-1);

    int *pi=p;

    printf("*pi=%d",*pi);

    shmdt(p);

    #include

    #include

    #include

    #include

    #include

    int main()

    key_t key=ftok(".",100);

    if(key==-1){

    perror("ftok");

    return -1;

    int shmid=shmget(key,4,ipc_creat|0660);

    if(shmid==-1)

    perror("shmget");

    exit(-1);

    void*p=shmat(shmid,0,0);

    if(p==(void*)-1)

    perror("shmat");

    exit(-1);

    int *pi=p;

    pi=100;

    shmdt(p);

  3. 匿名使用者2024-02-04

    我可以用你的**讀 100,此外,(void*)-1 想表達什麼? null?

  4. 匿名使用者2024-02-03

    當程式 2 完成執行時,它將退出。

    參考其他人的分析。

  5. 匿名使用者2024-02-02

    共享記憶體可以說是最有用的程序間通訊形式,也是最快的IPC形式。 兩個不同的程序 A 和 B 共享記憶體,這意味著同一物理記憶體片段對映到程序 A 和 B 的相應程序位址空間。

    程序 A 可以立即看到程序 B 對共享記憶體中資料的更新,反之亦然。 由於多個程序共享相同的記憶體區域,因此需要某種同步機制,包括互斥鎖和訊號量。

    使用共享記憶體通訊的乙個明顯好處是效率,因為該過程可以直接讀取和寫入記憶體,而無需任何資料副本。

    對於管道和訊息佇列等通訊方法,核心和使用者空間中需要四個資料副本

  6. 匿名使用者2024-02-01

    是的。 是的"是的"鎖定。 可以使用訊號量新增鎖。

  7. 匿名使用者2024-01-31

    Linux共享記憶體可以解鎖,但需要一種機制來標記共享記憶體的讀寫狀態;

    也就是說,要讓兩個程序都知道:

    1)負責寫入的程序必須知道當前共享記憶體是否可以寫入,以及上次寫入的內容是否已經被負責讀取的程序讀取;

    2)負責讀取的程序必須知道是否需要讀取當前共享記憶體,以防止重複讀取。

    這種通用標記機制的實現方式很簡單:

    1)通過讀寫鎖進行控制;

    2)在共享記憶體上設定乙個位置,用於儲存當前共享記憶體的讀寫狀態;

  8. 匿名使用者2024-01-30

    假設伺服器的守護程式是 d,它維護乙個廣播鍊表。 假設鍊表元素是 struct bentry;

    每次客戶端連線到分叉時,分叉完成時都會設定 ipc 均值,而不管管道、訊息或共享記憶體如何,客戶端與分叉的連線生成的伺服器子程序以 subn n n 作為下標。

    然後如果要廣播訊息,讓 subn 通知 d(可以使用廣播鍊表中的 ipc 方法,也可以再建立乙個),然後 d 將訊息廣播給每個 subm、subx,然後這些子程序再傳送給客戶端,這樣就可以同時廣播了, 哪個更有效率。

  9. 匿名使用者2024-01-29

    共享記憶體允許兩個或多個程序共享給定的儲存區域,並且是最快的程序間通訊機制,因為不需要來回複製資料。 共享記憶體可以通過 mmap() 對映普通檔案。

    在特殊情況下,也可以通過匿名對映)機制,或通過系統V共享記憶體機制來實現。應用介面和原理簡單,但內部機制複雜。 為了實現更安全的通訊,它經常與交通訊號燈等同步機制結合使用。

    mmap 的機制是在磁碟上建立乙個檔案,每個程序記憶體建立乙個單獨的對映空間。 如果有多個程序,那麼實際的物理記憶體(主記憶體)就不會消耗太多。

    SHM的機制:每個程序的共享記憶體直接對映到實際的物理記憶體。

    1.mmap儲存到實際硬碟,但實際儲存不反映在主記憶體上。 優點:儲存容量可以大(比主記憶體大); 缺點:程序間讀寫速度比主記憶體慢。

    2、SHM儲存到物理記憶體(主記憶體),實際儲存量直接反映到主記憶體。 優點,程序間訪問速度(讀寫)比磁碟快; 缺點是儲存容量不能很大(超過主記憶體)。

    在使用方面:如果分配的儲存空間不大,則使用SHM; 如果儲存量很大,則使用 mmap。

相關回答
6個回答2024-03-04

安裝APP後,開啟它,這時系統會要求你輸入你的個人手機號獲取驗證碼,驗證成功後即可登入APP了。 有些應用程式一開始不需要您驗證和註冊手機,但是當您想通過應用程式使用這些功能時,系統會要求您輸入您的電話號碼作為驗證碼。 >>>More

4個回答2024-03-04

讓我們從PHP相對複雜的伺服器實現開始。 如果您的伺服器上安裝了 PHP,則無論您是否安裝了 Nginx 或 Apache 等伺服器環境軟體,都可以執行 PHP 檔案。 在 Linux 中,使用命令列和 crontab 來排程任務是乙個很好的選擇,也是最有效的選擇。 >>>More

14個回答2024-03-04

首先,確保你們在同乙個網段,也就是說,如果你的IP是,那麼他的IP就是。 >>>More

4個回答2024-03-04

稅務情況說明。

市地方稅務局: >>>More

6個回答2024-03-04

使用共享汽車時,要注意**軟體和使用,應該選擇官方APP,通用在共享汽車的車身上,如果想使用共享汽車,可以直接掃瞄**,輸入手機號即可直接註冊。 >>>More