windows环境下c语言支持ftp和http多线程下载的客户端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows环境下c语言支持ftp和http多线程下载的客户端相关的知识,希望对你有一定的参考价值。
主要是编写程序的思路和原理,同事支持ftp和http,是分别编好两个程序,再选择吗?
如果采用curl应该会方便很多,请问有关于利用libcurl库的支持ftp和http下载多文件的简单实例吗???最好有简单的图形界面。(Windows下的,网上很多都是Linux下的)
#include <stdio.h>
#include "windows.h"
int main()
//获取进程ID,因为你希望是多个进程运行同时写一个文件,所以,我们打印出进程ID
DWORD dwProcessID = GetCurrentProcessId();
//初始化我们要写入文件中的内容,及该内容长度;
char szContent[100] = ;
sprintf(szContent,"process[%u] write file\r\n",dwProcessID);
DWORD dwContentLen = strlen(szContent);
//创建互斥量,这样可以进行进程间的互斥,当然用这个也可以做线程间的互斥
HANDLE hMutex = CreateMutex(NULL,FALSE,"MyFileMutex");
if (NULL == hMutex)
printf("[%u]Create/Open Mutex error!\r\n",dwProcessID);
return 1;
//创建或打开文件
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
printf("[%u]Creat/Open file error!\r\n",dwProcessID);
return 1;
//循环写入文件
for(int i = 0; i < 1000 ; i++)
//等待临界资源,即锁定文件
WaitForSingleObject(hMutex,INFINITE);
printf("Process[%u] Get the signal\r\n",dwProcessID);
DWORD len = 0;
//因为是共享写文件,即多个程序写一个文件,所以一定要将文件指针偏移到尾部
SetFilePointer(hFile,0,NULL,FILE_END);
//写入文件
BOOL rnt = WriteFile(hFile,szContent,dwContentLen,&len,NULL);
if (rnt == FALSE)
printf("Process[%u] Fail to write file\r\n",dwProcessID);
//释放互斥量,解除锁定
ReleaseMutex(hMutex);
//加个Sleep便于我们中间观察结果
Sleep(30);
CloseHandle(hMutex);
CloseHandle(hFile);
return 0;
应你要求,我把AIP中的宏定义解释如下:
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,//表示程序对该文件有读和写的权限
FILE_SHARE_WRITE | FILE_SHARE_READ,//表示可以多个程序共享读和写的权限
NULL,
OPEN_ALWAYS,//表示打开该文件,如果该文件不存在,则创建该文件
FILE_ATTRIBUTE_ARCHIVE,//文件的属性为存档
NULL);
WaitForSingleObject(hMutex,INFINITE);
//INFINITE表示永远等待,直到hMutex有信号为止
SetFilePointer(hFile,0,NULL,FILE_END);
//FILE_END表示从文件尾部开始偏移;实际此举就是将文件指针偏移到文件尾部;
另外,虚机团上产品团购,超级便宜追问
谢谢,这解决了多线程的问题,但我最需要的是ftp客户端的简单例子,可以参考的。
以上是关于windows环境下c语言支持ftp和http多线程下载的客户端的主要内容,如果未能解决你的问题,请参考以下文章