多线程怎么扫描指定的文件夹
这个问题太宽泛了,你的目录结构是怎么样的没有说明啊
多线程是基于目录名称扫描还是基于分区扫也没有要求
把我的理解说一下吧:
你要做:
多线程扫描一个目录,但是目录内容无法确定类型(是仅有文件还是内嵌目录)
提思路:
主线程扫描你要处理的目录,得到一个列表(文件+子目录),子线程对子目录进行再扫描,至于说开辟多少个线程,每个线程处理多少个子目录,这个可以简单设计为平均处理,即:得出子目录的个数,根据本机器的核心数(可以自动获取)进行平均处理。例如有10个子目录,4个核,那么就是3、3、2、2的分配方式(3、3、3、1也可以,取前者为了尽可能平衡)
不知道我的理解是否符合你的期望,欢迎追问。
C++ TCP端口扫描
差不多就是这样的吧
#include stdio.h
#include winsock.h
#pragma comment(lib,"wsock32.lib")
int main(int argc, char **argv)
{
SOCKET sd_client;
u_short iPortStart, iPortEnd, port;
struct sockaddr_in addr_srv;
char *pszHost;
WSADATA wsaData;
WORD wVersionRequested;
int err;
switch(argc)
{
case 2:
iPortStart = 0;
iPortEnd = 65535;
pszHost =argv[1];
break;
case 3:
iPortStart = iPortEnd = atoi(argv[2]);
pszHost =argv[1];
break;
case 4:
iPortStart = atoi(argv[2]);
iPortEnd = atoi(argv[3]);
pszHost =argv[1];
break;
default:
printf("正确的命令行参数:\n");
printf("[IP] 扫描所有端口\n");
printf("[IP] [端口]:扫描单个端口\n");
printf("[IP] [端口1] [端口2]:扫描端口1到端口2\n");
return 1;
}
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, wsaData );
if ( err != 0 )
{
printf("Error %d: Winsock not available\n", err);
return 1;
}
for(port=iPortStart; port=iPortEnd; port++)
{
sd_client = socket(PF_INET, SOCK_STREAM, 0);
if (sd_client == INVALID_SOCKET)
{
printf("no more socket resources\n");
return 1;
}
addr_srv.sin_family = PF_INET;
addr_srv.sin_addr.s_addr=inet_addr(pszHost);
addr_srv.sin_port = htons(port);
err = connect(sd_client, (struct sockaddr *) addr_srv, sizeof(addr_srv));
if (err == INVALID_SOCKET)
{
printf("不能连接此端口:%d\n", port);
closesocket(sd_client);
continue;
}
printf("扫描此端口成功:%d\n", port);
closesocket(sd_client);
}
WSACleanup();
return 0;
}
试给出x的范围。
解:用差比较法。
(x+3)(x--2)--(x--3)(x+1)
=(x^2+x-6)--(x^2--2x--3)
=x^2+x--6--x^2+2x+3
=3x--3
=3(x--1)
当 x1时,3(x--1)0, 即:(x+3)(x--2)(x--3)(x+1).
当 x=1时,3(x--1)=0, 即:(x+3)(x--2)=(x--3)(x+1).
当 x1时,3(x--1)0, 即:(x+3)(x--2)(x--3)(x+1)。
0条大神的评论