如果使用/subsystem:windows,入口点选用WinMain的话,参数PrevInstance会指向前一个实例对象(即上一个进程,如果是第一个则为NULL)
如果使用的是/subsystem:console,则可以枚举进程查找程序名,具体的可以查阅MSDN相关文档。
C语言没有库函数可以做到这一点。但是在Linux下,有一些替代方案。
见下:
基本思路是先定义一个FILE指针,用该指针接收popen()执行ps指令的返回值,再从指针中读取数据到缓存,根据得到的数据判断进程是否存在,怎么操作要看ps的参数了。
#include<unistd.h>#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<limits.h>
#define BUFSZ PIPE_BUF
void err_quit(char *msg)
{
perror(msg)
exit(EXIT_FAILURE)
}
int main(int argc, char *argv[])
{
FILE* fp
int count
char buf[BUFSZ]
char command[150]
if(argc != 2)
{
printf("USAGE: example <process name>\n")
exit(EXIT_SUCCESS)
}
else
sprintf(command, "ps -C %s|wc -l", argv[1] )
if((fp = popen(command,"r")) == NULL)
err_quit("popen")
if( (fgets(buf,BUFSZ,fp))!= NULL )
{
count = atoi(buf)
if((count - 1) == 0)
printf("%s not found\n",argv[1])
else
printf("process : %s total is %d\n",argv[1],(count - 1))
}
pclose(fp)
exit(EXIT_SUCCESS)
}