首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

基于c语言封装的ftp客户端开源库

后端 9.62KB 29 需要积分: 1
立即下载

资源介绍:

ftp
/***************************************************************************/ /* */ /* ftplib.c - callable ftp access routines */ /* Copyright (C) 1996-2001, 2013, 2016 Thomas Pfau, tfpfau@gmail.com */ /* 1407 Thomas Ave, North Brunswick, NJ, 08902 */ /* */ /* This library is free software. You can redistribute it and/or */ /* modify it under the terms of the Artistic License 2.0. */ /* */ /* This library is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* Artistic License 2.0 for more details. */ /* */ /* See the file LICENSE or */ /* http://www.perlfoundation.org/artistic_license_2_0 */ /* */ /***************************************************************************/ #if defined(__unix__) || defined(__VMS) #include #endif #if defined(_WIN32) #include #endif #include #include #include #include #include #if defined(__unix__) #include #include #include #include #include #include #elif defined(VMS) #include #include #include #include #include #elif defined(_WIN32) #include #endif #if defined(__APPLE__) #undef _REENTRANT #endif #define BUILDING_LIBRARY #include "ftplib.h" #if defined(__UINT64_MAX) && !defined(PRIu64) #if ULONG_MAX == __UINT32_MAX #define PRIu64 "llu" #else #define PRIu64 "lu" #endif #endif #if defined(_WIN32) #define SETSOCKOPT_OPTVAL_TYPE (const char *) #else #define SETSOCKOPT_OPTVAL_TYPE (void *) #endif #define FTPLIB_BUFSIZ 8192 #define RESPONSE_BUFSIZ 1024 #define TMP_BUFSIZ 1024 #define ACCEPT_TIMEOUT 30 #define FTPLIB_CONTROL 0 #define FTPLIB_READ 1 #define FTPLIB_WRITE 2 #if !defined FTPLIB_DEFMODE #define FTPLIB_DEFMODE FTPLIB_PASSIVE #endif struct NetBuf { char *cput,*cget; int handle; // 用于通讯的socket int cavail,cleft; char *buf; int dir; netbuf *ctrl; netbuf *data; int cmode; struct timeval idletime; FtpCallback idlecb; void *idlearg; unsigned long int xfered; unsigned long int cbbytes; unsigned long int xfered1; char response[RESPONSE_BUFSIZ]; }; static char *version = (char*)"ftplib Release 4.0 07-Jun-2013, copyright 1996-2003, 2013 Thomas Pfau"; GLOBALDEF int ftplib_debug = 0; #if defined(__unix__) || defined(VMS) int net_read(int fd, char *buf, size_t len) { while ( 1 ) { int c = read(fd, buf, len); if ( c == -1 ) { if ( errno != EINTR && errno != EAGAIN ) return -1; } else { return c; } } } int net_write(int fd, const char *buf, size_t len) { int done = 0; while ( len > 0 ) { int c = write( fd, buf, len ); if ( c == -1 ) { if ( errno != EINTR && errno != EAGAIN ) return -1; } else if ( c == 0 ) { return done; } else { buf += c; done += c; len -= c; } } return done; } #define net_close close #elif defined(_WIN32) #define net_read(x,y,z) recv(x,y,z,0) #define net_write(x,y,z) send(x,y,z,0) #define net_close closesocket #endif #if defined(NEED_MEMCCPY) /* * VAX C does not supply a memccpy routine so I provide my own */ void *memccpy(void *dest, const void *src, int c, size_t n) { int i=0; const unsigned char *ip=src; unsigned char *op=dest; while (i < n) { if ((*op++ = *ip++) == c) break; i++; } if (i == n) return NULL; return op; } #endif #if defined(NEED_STRDUP) /* * strdup - return a malloc'ed copy of a string */ char *strdup(const char *src) { int l = strlen(src) + 1; char *dst = malloc(l); if (dst) strcpy(dst,src); return dst; } #endif /* * socket_wait - wait for socket to receive or flush data * * return 1 if no user callback, otherwise, return value returned by * user callback */ static int socket_wait(netbuf *ctl) { fd_set fd,*rfd = NULL,*wfd = NULL; struct timeval tv; int rv = 0; if ((ctl->dir == FTPLIB_CONTROL) || (ctl->idlecb == NULL)) return 1; if (ctl->dir == FTPLIB_WRITE) wfd = &fd; else rfd = &fd; FD_ZERO(&fd); do { FD_SET(ctl->handle,&fd); tv = ctl->idletime; rv = select(ctl->handle+1, rfd, wfd, NULL, &tv); if (rv == -1) { rv = 0; strncpy(ctl->ctrl->response, strerror(errno), sizeof(ctl->ctrl->response)); break; } else if (rv > 0) { rv = 1; break; } } while ((rv = ctl->idlecb(ctl, ctl->xfered, ctl->idlearg))); return rv; } /* * read a line of text * * return -1 on error or bytecount */ static int readline(char *buf,int max,netbuf *ctl) { int x,retval = 0; char *end,*bp=buf; int eof = 0; if ((ctl->dir != FTPLIB_CONTROL) && (ctl->dir != FTPLIB_READ)) return -1; if (max == 0) return 0; do { if (ctl->cavail > 0) { x = (max >= ctl->cavail) ? ctl->cavail : max-1; end = memccpy(bp,ctl->cget,'\n',x); if (end != NULL) x = end - bp; retval += x; bp += x; *bp = '\0'; max -= x; ctl->cget += x; ctl->cavail -= x; if (end != NULL) { bp -= 2; if (strcmp(bp,"\r\n") == 0) { *bp++ = '\n'; *bp++ = '\0'; --retval; } break; } } if (max == 1) { *buf = '\0'; break; } if (ctl->cput == ctl->cget) { ctl->cput = ctl->cget = ctl->buf; ctl->cavail = 0; ctl->cleft = FTPLIB_BUFSIZ; } if (eof) { if (retval == 0) retval = -1; break; } if (!socket_wait(ctl)) return retval; if ((x = net_read(ctl->handle,ctl->cput,ctl->cleft)) == -1) { if (ftplib_debug) perror("read"); retval = -1; break; } if (x == 0) eof = 1; ctl->cleft -= x; ctl->cavail += x; ctl->cput += x; } while (1); return retval; } /* * write lines of text * * return -1 on error or bytecount */ static int writeline(const char *buf, int len, netbuf *nData) { int x, nb=0, w; const char *ubp = buf; char *nbp; char lc=0; if (nData->dir != FTPLIB_WRITE) return -1; nbp = nData->buf; for (x=0; x < len; x++) { if ((*ubp == '\n') && (lc != '\r')) { if (nb == FTPLIB_BUFSIZ) { if (!socket_wait(nData)) return x; w = net_write(nData->handle, nbp, FTPLIB_BUFSIZ); if (w != FTPLIB_BUFSIZ) { if (ftplib_debug) printf("net_write(1) returned %d, errno = %d\n", w, errno); return(-1); } nb = 0; } nbp[nb++] = '\r'; } if (nb == FTPLIB_BUFSIZ) { if (!socket_wait(nData)) return x; w = net_write(nData->handle, nbp, FTPLIB_BUFSIZ); if (w != FTPLIB_BUFSIZ) { if (ftplib_debug) printf("net_write(2) returned %d, errno = %d\n", w, errno); return(-1); } nb = 0; } nbp[nb++] = lc = *ubp++; } if (nb) { if (!socket_wait(nData)) return x; w = net_write(nData->handle, nbp, nb); if (w != nb) { if (ftplib_debug) printf("net_write(3) returned %d, errno = %d\n", w, errno); return(-1); } } return len; } /* * read a response from the server * * return 0 if first char doesn't match * return 1 if first char matches */ static int readresp(char c, netbuf *nControl) { char match[5]; if (readline(nControl->response,RESPONSE_BUFSIZ,nControl) == -1) { if (ftplib_debug) perror("Control socket read failed"); return 0; } if (ftplib_debug > 1) fprintf(stderr,"%s",nControl->response); if (nControl->response[3] == '-') { strncpy(match,nControl->response,3); match[3] = ' '; match[4] = '\0'; do { if (readline(nControl->response,RESPONSE_BUFSIZ,nControl) == -1) { if (ftplib_debug) perror("Control soc

资源文件列表:

ftp开源库.zip 大约有2个文件
  1. ftp开源库/ftplib.c 30.13KB
  2. ftp开源库/ftplib.h 4.9KB
0评论
提交 加载更多评论
其他资源 大语言模型+llama3+代码+学习可运行llama3代码
本项目基于Meta最新发布的新一代开源大模型Llama-3开发,是Chinese-LLaMA-Alpaca开源大模型相关系列项目(一期、二期)的第三期。本项目开源了中文Llama-3基座模型和中文Llama-3-Instruct指令精调大模型。这些模型在原版Llama-3的基础上使用了大规模中文数据进行增量预训练,并且使用精选指令数据进行精调,进一步提升了中文基础语义和指令理解能力,相比二代相关模型获得了显著性能提升。 我已将如何训练+推理以及vscode配置等内容放入文件夹,你可直接下载按照要求执行,以便进一步解读与学习。当然,我也会在博客解读代码细节,以此帮助大家对大语言模型理解。
大语言模型+llama3+代码+学习可运行llama3代码 大语言模型+llama3+代码+学习可运行llama3代码 大语言模型+llama3+代码+学习可运行llama3代码
NetV8,用于VFP专用版
NetV8,用于VFP专用版
Java Web的简单登录应用
使用JavaWeb简单实现登录页面并分类跳转,使普通用户可以查看自己的有关数据,管理员身份登录可以对数据进行管理。(存在问题,求大佬指导)
yolov3///////////
yolov3///////////
yolov3/////////// yolov3/////////// yolov3///////////
st-link驱动安装包,可以匹配USB
st-link驱动安装包,可以解决初次使用st-link时的端口无法检测到对应的端口问题,本人初次遇到该问题的时候,是在stm32c8t6最小系统板,因为其不具备烧录口,需要外接st-link,但是由于第一次使用,keil5在烧录过程总始终无法检测到,因此进行大量上网搜索才发现需要安装驱动,个人感觉也是新手小白初学时会遇到的问题,也希望能为大家提供帮助
Bz二进制编辑工具(压缩包)
Bz1621.lzh官方版是一款实用的二进制编辑器软件。Bz1621.lzh最新版具有4种编辑模式(文本、十六进制、十进制、二进制)。软件内置了两个插件(Hex Calculator 与 Base Converter)。Bz1621.lzh官方版可以对操作的语言进行自定义的选择,不对中文的语言支持。 Bz1621.lzh基本简介: Bz1621.lzh官方版是30天自制操作系统书中提到的一款二进制编辑器,不需要安装,解压缩之后打开Bz.exe就能直接使用了,目前windows所有操作系统都能运行,有需要的赶快下载吧! Bz1621.lzh功能介绍: 1、Bz1621.lzh官方版可以编辑非常大的文件,最大可高达4GB。 2、具有4种编辑模式(文本、十六进制、十进制、二进制)。 3、内置了两个插件(Hex Calculator 与 Base Converter)。 4、可快速加载文件。 Bz1621.lzh软件特色: Bz1621.lzh官方版可以对操作的语言进行自定义的选择,不对中文的语言支持。也可根据自己的使用需求来对软件内置的功能设置,可以对软件的背景颜色进行更改。
stm32f103c8+proteus8.9+温度传感器ds18b20
实验要求 使用proteus仿真+keil编译 用Proteus设计一个STM32最小系统板+温度传感器ds18b20实验原理图,仿真运行。 以STM32最小系统核心板(STM32F103C8T6)编写程序,驱动ds18b20,使用proteus8.9编写原理图。 用stm32标准库编写,有必要的注释。
springboot aop切面实现方法入参及返回结果数据加解密
springboot+aop 自定义注解(切入点为方法) 可对请求入参或者返回结果进行加解密 可允许用户自定义加解密工具类 本工具自带默认加解密工具类,用户可自行选择是否使用