7,763
社区成员
发帖
与我相关
我的任务
分享
//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>
[/quote]
老赵真是老师?
索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了?
还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。
你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。[/quote]
赵4这套狗P理论,看着恶心死了…………还老是自以为是……
用他这种编程回想,不知道造就了多少垃圾代码!!!
//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>
[/quote]
老赵真是老师?
索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了?
还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。
你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。[/quote]
你好,首先感谢回帖。我不是专业码代码的,只是有时候做控制需要处理一些数据,因此对大家的观点不敢妄加评论。但是上述有一些我很赞同,在控制里面,很多时候每秒需要采集、计算和输出1000+数据,用文件在软件之间交换信息确实不太可能哈,低速的场合或许可以的。
我试了一下,代码经过简单的修改可以从VB转到VB,net,而且可以不报错调试打开软件界面,但是调用硬件初始化函数的时候就会出现“内存、堆栈、签名”关键词的报错。但是因为硬件厂商提供的底层函数用了*.lib,所以想看原函数不太可能。因此作罢。再次感谢你的回答!
//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>
[/quote]
老赵真是老师?
索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了?
还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。
你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。//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>