user-0 提问: C语言中，程序A不断在写文件1.txt，程序B此时能读取1.txt吗？

回复:
user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:不看zhao4zhong1回帖，你会浪费一大段青春。 看了，赵4老师太强，小弟能力太差啊！

user: user-1
content: 百度搜“IPC”

user: user-1

user: user-1
content: 不看zhao4zhong1回帖，你会浪费一大段青春。

user: user-0
content: 引用 6 楼 xian_wwq 的回复:A不断的写入具体是什么形式？ 一直追加还是覆盖模式？ B在读取的时候建议先复制文件，然后读取复制的文件  A程序不断追加。就是A程序每秒钟都会向1.txt中追加新计算出来的结果，现在要将这个结果通过界面实时显示出来

user: user-2
content: A不断的写入具体是什么形式？ 一直追加还是覆盖模式？ B在读取的时候建议先复制文件，然后读取复制的文件

user: user-1
content: 综上所述，最佳办法是通过两个文件名不同的文件轮转“A写这个，B读那个；然后A写那个，B读这个。”

user: user-2
content: 引用 7 楼 qq_40669149 的回复:[quote=引用 6 楼 xian_wwq 的回复:] A不断的写入具体是什么形式？ 一直追加还是覆盖模式？ B在读取的时候建议先复制文件，然后读取复制的文件  A程序不断追加。就是A程序每秒钟都会向1.txt中追加新计算出来的结果，现在要将这个结果通过界面实时显示出来[/quote] 那就是要显示增量数据， 起个线程比对文件的长度变化，一旦有变化，就复制该文件。 可以根据上一轮记录的文件长度，seek到指定位置，读取附加的新数据就行。 ----- 顺便补一句，这个A程序如果不清理1.txt的数据，迟早会出现文件过大打不开的情况

user: user-1
content: //test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用 //A将请求数据写到文件a.txt，写完后改名为aa.txt //B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt //A发现bb.txt存在时，读取其内容，读完后删除bb.txt #include <io.h> #include <stdio.h> #include <windows.h> int main(int argc,char **argv) {     int d,r;     FILE *f;     char cmdstr[512];      if (argc<2) {         sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);         WinExec(cmdstr,SW_HIDE);         for (d=1;d<=5;d++) {//共使用1..5调用B 5次             //A将请求数据写到文件a.txt，写完后改名为aa.txt             f=fopen("a.txt","w");             fprintf(f,"%d\n",d);             fclose(f);             rename("a.txt","aa.txt");             printf("call with %d\n",d);             //A发现bb.txt存在时，读取其内容，读完后删除bb.txt             while (1) {                 Sleep(100);                 if (_access("bb.txt",0)!=-1) {                     f=fopen("bb.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     remove("bb.txt");                     break;                 }             }             printf("result:%d\n",r);         }         return 0;     }     if (argv[1][0]=='a'||argv[1][0]=='A') {//A         for (d=1;d<=5;d++) {//共使用1..5调用B 5次             //A将请求数据写到文件a.txt，写完后改名为aa.txt             f=fopen("a.txt","w");             fprintf(f,"%d\n",d);             fclose(f);             rename("a.txt","aa.txt");             printf("call with %d\n",d);             //A发现bb.txt存在时，读取其内容，读完后删除bb.txt             while (1) {                 Sleep(100);                 if (_access("bb.txt",0)!=-1) {                     f=fopen("bb.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     remove("bb.txt");                     break;                 }             }             printf("result:%d\n",r);         }     } else {//B         while (1) {             //B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt             while (1) {                 Sleep(100);                 if (_access("aa.txt",0)!=-1) {                     f=fopen("aa.txt","r");                     fscanf(f,"%d",&r);                     fclose(f);                     r=r*10;                     f=fopen("b.txt","w");                     fprintf(f,"%d\n",r);                     fclose(f);                     remove("aa.txt");                     rename("b.txt","bb.txt");                     break;                 }             }             if (r==50) break;         }     }     return 0; } //C:\tmp\test>test //call with 1 //result:10 //call with 2 //result:20 //call with 3 //result:30 //call with 4 //result:40 //call with 5 //result:50 // //C:\tmp\test>start /B test B // //C:\tmp\test>test A //call with 1 //result:10 //call with 2 //result:20 //call with 3 //result:30 //call with 4 //result:40 //call with 5 //result:50 // //C:\tmp\test>

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，再将b.txt改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！

user: user-3
content: 你先试试能不能打开文件吧

user: user-4
content: 建议不要这么做  很容易出问题

user: user-5
content: B可以去读取，但是有个情况：若程序B读取的快，A还没写入，此时B读取的是文件末尾，其实现在A还会继续写入此时B读取到的文件末尾是临时的，不是真实的，因此需要考虑到这种情况。