⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findstate.cpp

📁 linux下通过通过进程的文件执行名查找其管道号pid
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/types.h>

char *FindState(const char *commands,  const char *delim)
{
	if(NULL == commands)
	{
		return 0;
	}
	char line[133], comm[80];
	char *cmd = NULL;
	char *state = NULL;
	char *token = NULL;
	char *linep = NULL;
	FILE *fp;
	int stat;
	int flg = 0;
	fp = popen("ps -x","r");
	if(NULL == fp)
	{
		return 0;
	}
	if(NULL == fgets(line, sizeof(line), fp))
	{
		pclose(fp);
		return 0;
	}
	for(linep = line; ; linep = NULL)
	{
		if(NULL == (token = strtok(linep, delim)))
		{
			pclose(fp);
			return 0;
		}

		if(0 == strcmp(token, "COMMAND") )
		{
			cmd = token;
			flg++;
		}

		if(0 == strcmp(token, "STAT"))
		{
			state = token;
			flg++;
		}
		
		if(2 == flg )
		{
			flg = 0;
			break;
		}
	}
	
	while(true)
	{
		if(NULL == fgets(line, sizeof(line), fp))
		{
			pclose(fp);
			return 0;
		}

		if(NULL == (token = strtok(cmd , delim)))
		{
			pclose(fp);
			return 0;
		}

		if(0 == strcmp(token, commands))
		{
			if(NULL == (token = strtok(state, delim)))
			{
				pclose(fp);
				return 0;
			}
			break;
		}
	}
	stat = pclose(fp);
	if (!WIFEXITED(stat) || 0 != WEXITSTATUS(stat))
		return 0;
	return token;
}

int main(void)
{
	char *status = NULL;
	status = FindState("/usr/sbin/sshd"," \t\n");
	if(status == "Z")
	{
		printf("/usr/sbin/sshd STAT   : [%s] \n\n",status);
	}
	else
	{
		printf("/usr/sbin/sshd STATS   : [%s] \n\n",status);
	}
	exit(EXIT_SUCCESS);
}
  
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -