用c如何完成判断某个服务是否开启 (请各位指点一下!谢谢)

努力偷懒 2004-12-18 11:54:30
用c如何完成判断某个服务是否开启 (请各位指点一下!谢谢)
我现在没有任何头绪或者方法!请各位指点一下!谢谢!或者告诉我大概要看哪些内容!
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cizi_nwu 2004-12-20
  • 打赏
  • 举报
回复
我也想知道……
努力偷懒 2004-12-20
  • 打赏
  • 举报
回复
恩!是判断网络服务!不是普通的服务!
nooning 2004-12-20
  • 打赏
  • 举报
回复
服务不只是网络服务吧
努力偷懒 2004-12-20
  • 打赏
  • 举报
回复
Nety2004(~~~oo我不是高手)
说的值得试一下,因为我当时也想了,我可以用bind绑定那个服务的端口,如果绑定成功,说明哪个端口没被使用,如果绑定不成功,那个端口已经被使用!
mhcio 2004-12-20
  • 打赏
  • 举报
回复
自己改一下吧
大致意思就是在/proc下找进程pid
没有找到的话
while循环结束
在while外面加一条就行
找到的话就把状态存入数组中
mhcio 2004-12-20
  • 打赏
  • 举报
回复
如果知道进程名 就可以用下面的代码:
=========================================================================
#include "unistd.h"
#include "dirent.h"
#include "sys/param.h"
#include "sys/types.h"
#include "sys/wait.h"
#include "sys/stat.h"
#include "stdio.h"
//-----------------------------------------------------------------------------
#define READ_BUF_SIZE 50
char sts[READ_BUF_SIZE]; //用来保存进程的状态
//-----------------------------------------------------------------------------


void find_status_by_name(char* pidName)
{
DIR *dir;
struct dirent *next;
FILE *file;
char filename[READ_BUF_SIZE];
char buffer[READ_BUF_SIZE];
char name[READ_BUF_SIZE];

dir = opendir("/proc");
if (!dir)
{
fprintf(stderr, "Cannot open /proc\n");
}


while ((next = readdir(dir)) != NULL)
{

/* Must skip ".." since that is outside /proc */
if (strcmp(next->d_name, "..") == 0)
continue;

/* If it isn't a number, we don't want it */
if (!isdigit(*next->d_name))
continue;

sprintf(filename, "/proc/%s/status", next->d_name);
if (! (file = fopen(filename, "r")) )
{
continue;
}
/* Read first line in /proc/?pid?/status */
fgets(buffer, READ_BUF_SIZE-1, file);


/* Buffer should contain a string like "Name: binary_name" */
sscanf(buffer, "%*s %s", name);
if (strcmp(name, pidName) == 0)
{
fgets(buffer, READ_BUF_SIZE-1, file);
fclose(file);
sscanf(buffer, "%*s %s", sts);
break;
}
}
closedir(dir);
}
==============================================================================
然后查看sts中是什么
R ->runable
S ->Sleep
......
Nety2004 2004-12-19
  • 打赏
  • 举报
回复
假如你要判断1.2.3.4的SMTP(25端口)服务是否开启,你只要创建一个socket,用connect()函数去连接该服务器的该端口,如果返回0,表示连接成功,则该服务器有开启该服务;如果返回-1,则表示没有开启.
blder 2004-12-19
  • 打赏
  • 举报
回复
关注
帮你顶

23,126

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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