亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

linux進程通訊之純文本文件講解

添加時間:2010-11-12  添加: admin 

一)概述:

  1)純文本文件是一種原始但卻高效的進程間通信方式,當兩個不同步執行的進程必須要進行通信時,文件或許是進行IPC的唯一選擇.

  2)一般來講通過純文本文件在多個進程之間進行過渡,傳輸數據,而gcc編譯程序就是一個例子,它會生成中間文件,最后再將其刪除.

  3)當兩個進程使用文件進行通信時,無法保證當一個進程在讀的時候,另一個進程沒有去寫,下面的例子用于說明這個問題.

  二)文本文件的IPC和lockf函數

  源程序1如下:

  #include <stdio.h>

  #include <string.h>

  #include <stdlib.h>

  #include <unistd.h>

  #include <sched.h>

  #include <sys/wait.h>

  const char *filename = "messagebuf.dat";

  void error_out(const char *msg)

  {

  perror(msg);

  exit(EXIT_FAILURE);

  }

  void child(void)

  {

  FILE *fp = fopen(filename, "r");

  if (fp == NULL)

  error_out("child:fopen");

  char buf[32];

  fread(buf, sizeof(buf), 1, fp);

  printf("child read: %sn", buf);

  fclose(fp);

  }

  void parent(void)

  {

  FILE *fp = fopen(filename, "w");

  if (fp == NULL)

  error_out("parent:fopen");

  fprintf(fp, "Hello world");

  fclose(fp);

  }

  int main (int argc, char *argvp[])

  {

  pid_t pid = fork();

  if (pid == 0){

  child();

  }

  else{

  parent();

  int status = 0;

  int r = wait(&status);

  if (r == -1)

  error_out("parent:wait");

  printf("child status=%dn", WEXITSTATUS(status));

  unlink(filename);

  }

  exit(0);

  }

  gcc file-ipc-naive.c -o file-ipc-naive

  當運行時返回下面的錯誤信息

  ./file-ipc-naive

  child:fopen: No such file or directory

  child status=1

  我們來分析一下上面的程序,程序運行后即執行了fork,此時派生了子進程,執行了child();而父進程執行了parent();

  子進程通過fopen(filename, "r")試圖打開messagebuf.dat文件,而此時如果父進程沒有執行到fopen(filename, "w"),這時程序就會報上面的錯誤.

  而如果我們通過strace運行file-ipc-navie這個程序,返回的結果也許會不同,如下:

  strace -o strace.out -f ./file-ipc-naive

  child read: Hello world;

  child status=0

  原因在于用strace監視程序運行時,有充足的時間讓程序可以輸出正確的結果,但不是每次都能得到正確的輸出.

  為解決這個問題,我們可以用lockf函數對文件進行鎖定控制.

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站