在Windows环境下,利用高级语言编程环境(限定为VS环境或VC环境)调用相关的系统调用(CreateProccess,即系统API)实现一个包括“进程创建,文件读写”功能的应用程序。有一个文本文件CommandList.txt,第一行是说明性文字:本文件最后一次打开和运行日期是20200224。第二行开始每行是一个可执行程序的名称(含路径)。编写一个应用程序能打开该文件,顺序执行其中的每个程序,并将文件第一行中的日期更新为当前日期。将源代码及运行截图放在同一个WORD文档中,以附件的形式上传提交。说明:文本文件CommandList.txt直接用记事本创建即可,以下为该文件的一个实例,可以自己设计该文件中第2行开始的内容。
本文件最后一次打开和运行日期是20200224
c:\Windows\system32\notepad.exe
c:\Windows\system32\calc.exe
c:\Windows\system32\mspaint.exe
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include<time.h>
int main(
//int *argc,char* argv
)
{
time_t t; //将t声明为时间变量
struct tm *p; //struct tm是一个结构体,声明一个结构体指针
time(&t);
p=localtime(&t);//获得当地的时间
//
int i=0; //计数多少行
int k=0;//记录当前行数
char a[100][100]={0}; //存入按行读取的数据
char *zw="c:\\windows\\system32\\notepad.exe ";
char *b="C:/Users/Administrator/Desktop/CommandList.txt" ;
FILE *fp;
fp=fopen(b,"r");
if(fp==NULL)
{printf("can not load file!");return 1; } //检查是否打开;
while(!feof(fp))
{
fgets(a[i++],100,fp);
// printf("%s",a[i-1]);
int temp = strlen(a[i-1]);
if(a[i-1][temp-1]==10) a[i-1][temp-1]=0;
}
fclose(fp);
fp=fopen(b,"w");
// fputs("本文件最后一次打开和运行日期是",fp);
fprintf(fp,"本文件最后一次打开和运行日期是%d%02d%02d %02d:%02d:%02d",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
fputc('\n',fp); //修改第一行
/
for(k=1;k<i;k++)//存入其他行数据
{fprintf(fp,a[k]);
fputc('\n',fp);
}
fclose(fp);
PROCESS_INFORMATION processInfo;
STARTUPINFOA startupInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
BOOL ret1 = CreateProcess(NULL,"c:\\windows\\system32\\notepad.exe C:/Users/Administrator/Desktop/CommandList.txt",NULL, NULL, false,
0, NULL, NULL, &startupInfo, &processInfo);
for(k=0;k<i;k++){
BOOL ret2 = CreateProcess(a[k],NULL,NULL, NULL, false,
0, NULL, NULL, &startupInfo, &processInfo);
}
fp=fopen(b,"r");
while(!feof(fp))
{
fgets(a[i++],100,fp);
printf("%s",a[i-1]);
int temp = strlen(a[i-1]);
if(a[i-1][temp-1]==10) a[i-1][temp-1]=0;
}
fclose(fp);
return 0;
}