两个程序同时运行

lnnx2006 2010-12-15 01:26:42
大家好:我遇到一个问题,希望大家能够帮助解决。
我现在针对一个问题写了两个程序,1.c和2.c。
首先执行2.c,让2.c读取inputdate.txt文件,并且执行运算后,输出1.txt
接着让1.c读取1.txt,运行后,会产生001.txt
然后让让2.c读001.txt,并且执行运算后,输出2.txt;
接着让1.c读取2.txt,运行后,会产生002.txt,
然后让让2.c读002.txt,并且执行运算后,输出3.txt
……
直到满足1.c中的循环条件(100次)时,停止。


这个问题应该怎么处理?我现在只能手工做到,如何让程序自己跑呢?谢谢了。。
...全文
444 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo364 2010-12-20
  • 打赏
  • 举报
回复
先写个读取文件,写入文件的函数,linux下完全可以用shell这样执行
#include <stdio.h>

int filecopy();

int main()
{
int a;
a=filecopy();
if(a==0)
{
printf("ok\n");
}
else
{
printf("error\n");
}
system("pause");
return 0;
}

int filecopy()
{
char ch;
FILE *fin;
FILE *fout;

if((fin = fopen("in.txt", "rb+")) == NULL) //也可以以"rt"文本方式打开
{
printf("can't open the file/n");
return (-1);
}

if((fout = fopen("out.txt", "wb")) == NULL) //也可以以"rt"文本方式打开
{
printf("can't open the file/n");
return (-1);
}

while(!feof(fin))
{
ch = fgetc(fin);
if(ch != EOF) //在这里加一个条件判断便可
{
fputc(ch, fout);
}
}

fclose(fin);
fclose(fout);

//system("PAUSE");
return 0;
}
yuguifu 2010-12-20
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int rename(char* oldname,char* newname)
{
char cmd[128] = "";

sprintf(cmd,"ren %s %s",oldname,newname); //ren %s %s是dos下的重命名命令,第一个%s:原文件名,第二个%s:新文件名

if(system(cmd) != 0) //执行命令
{
printf("执行命令:%s 失败 !\n",cmd);
return -1;
}
return 0;
}

int main(int argc,char* argv[])
{
int count = 1;

//char filename[64] = "inputdate.txt";
char oldname[64] = ""; //原文件名
char newname[64] = ""; //新文件名

//判断参数是否正确
if(argc != 2)
{
//printf("The num of parameter wrong!\n");
printf("Usage:%s message\n",argv[0]); //执行程序时:程序名 文件名
return -1;
}


strcpy(oldname,argv[1]);

//strcpy(oldname,filename);


//重命名
for(count = 1;count<=100;count++)
{
sprintf(newname,"%d",count);
strcat(newname,".txt");
//if(strcmp(oldname,filename) == 0)
if(strcmp(oldname,argv[1]) == 0)
{
if(rename(oldname,newname) != 0)
{
printf("rename failed!\n");
return -1;
}
}
if(strstr(oldname,"00") != 0)
{
if(rename(oldname,newname) != 0)
{
printf("rename failed!\n");
return -1;
}
}
memset(oldname,0,sizeof(oldname));
//memset(newname,0,sizeof(newname));
strcpy(oldname,"00");
sprintf(oldname+2,"%d",count);
strcat(oldname,".txt");
if(rename(newname,oldname) != 0)
{
printf("rename failed 1!\n");
return -1;
}
memset(newname,0,sizeof(newname));
}

return 0;
}



swlilike 2010-12-18
  • 打赏
  • 举报
回复
简单说 你的意思是两个程序同时运行分不清哪个干活哪个该停下 因为不是一个程序 没有一个控制变量
如果是一个程序相信你就会用了吧,

连接两个程序让他们同步(相当于一个程序)的办法挺多的 共享内存 互斥变量 进程通讯

当然你这两个程序 用互斥量做 最容易了, 创建互斥体, 用完了之后删除互斥体,再次创建的时候 看互斥体创建成功与否 来确定程序执行。很容易了吧。。

共享内存 稍微容易些 不过需要弄的东西挺多的,你的程序不复杂 就用互斥量吧
lnnx2006 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hqin6 的回复:]

进程间的同步问题?
[/Quote]
有人说是多线程,不知道对不对?谢谢。。。能再详细一点吗?
lnnx2006 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluerainse 的回复:]

我也觉得,先编好函数,然后循环调用,同时也应该没这么多问题的。
[/Quote]

如果是写成函数的话,是在同一个C程序还是写成两个C程序?写成同一个,就不是我的问题了啊。。。
我现在的是两个程序的问题。。谢谢啦
lnnx2006 2010-12-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yuguifu 的回复:]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int rename(char* oldname,char* newname)
{
char cmd[128] = "";

sprintf(cmd,"ren %s %s",oldname,newname);

if(system(cmd) != 0)
{……
[/Quote]

你好,能不能给你写的程序加点注释呢?我看了之后,还感觉不是很清楚,谢谢啦。。。
yuguifu 2010-12-15
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int rename(char* oldname,char* newname)
{
char cmd[128] = "";

sprintf(cmd,"ren %s %s",oldname,newname);

if(system(cmd) != 0)
{
printf("执行命令:%s 失败 !\n",cmd);
return -1;
}
return 0;
}

int main(int argc,char* argv[])
{
int count = 1;

//char filename[64] = "inputdate.txt";
char oldname[64] = "";
char newname[64] = "";

//判断参数是否正确
if(argc != 2)
{
//printf("The num of parameter wrong!\n");
printf("Usage:%s message\n",argv[0]);
return -1;
}


strcpy(oldname,argv[1]);

//strcpy(oldname,filename);

for(count = 1;count<=100;count++)
{
sprintf(newname,"%d",count);
strcat(newname,".txt");
//if(strcmp(oldname,filename) == 0)
if(strcmp(oldname,argv[1]) == 0)
{
if(rename(oldname,newname) != 0)
{
printf("rename failed!\n");
return -1;
}
}
if(strstr(oldname,"00") != 0)
{
if(rename(oldname,newname) != 0)
{
printf("rename failed!\n");
return -1;
}
}
memset(oldname,0,sizeof(oldname));
//memset(newname,0,sizeof(newname));
strcpy(oldname,"00");
sprintf(oldname+2,"%d",count);
strcat(oldname,".txt");
if(rename(newname,oldname) != 0)
{
printf("rename failed 1!\n");
return -1;
}
memset(newname,0,sizeof(newname));
}

return 0;
}



刚刚写完,不知道对你有没有帮助
要求只针对.txt文件(暂时),你可以自己修改,同时文件与程序要在同一目录中!!!
太乙 2010-12-15
  • 打赏
  • 举报
回复
进程间的同步问题?
luciferisnotsatan 2010-12-15
  • 打赏
  • 举报
回复
进程间通讯
或者写个脚本,做你手工做的事
flysnowhite 2010-12-15
  • 打赏
  • 举报
回复
就是循环调用吧。1.c和2.c分别写两个函数进行输入输入输出工作,在main函数中循环调用即可。
Paradise_for_why 2010-12-15
  • 打赏
  • 举报
回复
3楼方法可行
bluerainse 2010-12-15
  • 打赏
  • 举报
回复
我也觉得,先编好函数,然后循环调用,同时也应该没这么多问题的。
野男孩 2010-12-15
  • 打赏
  • 举报
回复
代码里面写循环呗。。。。循环不就是用来干这个的吗?1.txt,2.txt,3.txt.....
代码下载地址: https://pan.quark.cn/s/8236006bf1f9 Word精灵插件:一款用于增强Microsoft Word功能的辅助软件,能够将多种复杂功能转化为插件形式,并在软件状态栏中进行展示,涵盖诸如批注管理、表格处理、内容替换、文档拆分、数学运算、字符提取、批量重命名等多项实用工具。在工作环境中应用该插件能够显著降低工作强度,提升操作效率。Word精灵插件兼容32位与64位的Microsoft Word版本,支持Word 2007、2010、2013以及Word 2016操作系统,但不适用于Word 2003版本。此外,该插件同样支持WPS办公软件。 功能概述: 1、表格自动调整宽度:自动优化文档内所有表格的显示宽度。 2、批量导出批注信息:将文档内所有批注集中导出到Excel工作簿中。 3、表格至Excel多表导出:在将表格导出到Excel时,每个Word表格将独立存放在一个工作表中,Word文档内的表格数量与Excel生成的工作表数量相等,并附有工作表目录。 4、表格至Excel单表导出:将文档内所有表格整合后导出到一个Excel工作表中,多个表格将按顺序排列于同一工作表内。 5、统一图片分辨率:对指定文件夹内的所有图片进行分辨率标准化处理。 6、图片批量缩放:依据设定比例对图片进行放大或缩小,支持按百分比调整。 7、图片批量插入:将图片批量插入到当前文档,可选择图片名称的展示形式,并设定图片的高度。 8、图片格式统一转换:将指定文件夹内的所有图片转换为相同的文件格式。 9、内容批量替换:对文档内容、页眉及页脚执行批量替换操作,例如将数字1替换为字母A,数字2替换为字母B,数字3替换为字母C等。 10、图片批量导出:将文档内所...

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧