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

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

linux進(jìn)程通訊之純文本文件講解

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

一)概述:

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

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

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

  二)文本文件的IPC和lockf函數(shù)

  源程序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

  當(dāng)運行時返回下面的錯誤信息

  ./file-ipc-naive

  child:fopen: No such file or directory

  child status=1

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

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

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

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

  child read: Hello world;

  child status=0

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

  為解決這個問題,我們可以用lockf函數(shù)對文件進(jìn)行鎖定控制.

分享到:

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