亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftplib.c

?? linux下r的FTP源碼,已經測試通過!
?? C
?? 第 1 頁 / 共 2 頁
字號:
	perror("setsockopt");	net_close(sData);	return -1;    }    if (nControl->cmode == FTPLIB_PASSIVE)    {	if (connect(sData, &sin.sa, sizeof(sin.sa)) == -1)	{	    perror("connect");	    net_close(sData);	    return -1;	}    }    else    {	sin.in.sin_port = 0;	if (bind(sData, &sin.sa, sizeof(sin)) == -1)	{	    perror("bind");	    net_close(sData);	    return 0;	}	if (listen(sData, 1) < 0)	{	    perror("listen");	    net_close(sData);	    return 0;	}	if (getsockname(sData, &sin.sa, &l) < 0)	    return 0;	sprintf(buf, "PORT %d,%d,%d,%d,%d,%d",		(unsigned char) sin.sa.sa_data[2],		(unsigned char) sin.sa.sa_data[3],		(unsigned char) sin.sa.sa_data[4],		(unsigned char) sin.sa.sa_data[5],		(unsigned char) sin.sa.sa_data[0],		(unsigned char) sin.sa.sa_data[1]);	if (!FtpSendCmd(buf,'2',nControl))	{	    net_close(sData);	    return 0;	}    }    ctrl = calloc(1,sizeof(netbuf));    if (ctrl == NULL)    {	perror("calloc");	net_close(sData);	return -1;    }    if ((mode == 'A') && ((ctrl->buf = malloc(FTPLIB_BUFSIZ)) == NULL))    {	perror("calloc");	net_close(sData);	free(ctrl);	return -1;    }    ctrl->handle = sData;    ctrl->dir = dir;    ctrl->idletime = nControl->idletime;    ctrl->idlearg = nControl->idlearg;    ctrl->xfered = 0;    ctrl->xfered1 = 0;    ctrl->cbbytes = nControl->cbbytes;    if (ctrl->idletime.tv_sec || ctrl->idletime.tv_usec || ctrl->cbbytes)	ctrl->idlecb = nControl->idlecb;    else	ctrl->idlecb = NULL;    *nData = ctrl;    return 1;}/* * FtpAcceptConnection - accept connection from server * * return 1 if successful, 0 otherwise */static int FtpAcceptConnection(netbuf *nData, netbuf *nControl){    int sData;    struct sockaddr addr;    unsigned int l;    int i;    struct timeval tv;    fd_set mask;    int rv;    FD_ZERO(&mask);    FD_SET(nControl->handle, &mask);    FD_SET(nData->handle, &mask);    tv.tv_usec = 0;    tv.tv_sec = ACCEPT_TIMEOUT;    i = nControl->handle;    if (i < nData->handle)	i = nData->handle;    i = select(i+1, &mask, NULL, NULL, &tv);    if (i == -1)    {        strncpy(nControl->response, strerror(errno),                sizeof(nControl->response));        net_close(nData->handle);        nData->handle = 0;        rv = 0;    }    else if (i == 0)    {	strcpy(nControl->response, "timed out waiting for connection");	net_close(nData->handle);	nData->handle = 0;	rv = 0;    }    else    {	if (FD_ISSET(nData->handle, &mask))	{	    l = sizeof(addr);	    sData = accept(nData->handle, &addr, &l);	    i = errno;	    net_close(nData->handle);	    if (sData > 0)	    {		rv = 1;		nData->handle = sData;	    }	    else	    {		strncpy(nControl->response, strerror(i),                        sizeof(nControl->response));		nData->handle = 0;		rv = 0;	    }	}	else if (FD_ISSET(nControl->handle, &mask))	{	    net_close(nData->handle);	    nData->handle = 0;	    readresp('2', nControl);	    rv = 0;	}    }    return rv;	}/* * FtpAccess - return a handle for a data stream * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpAccess(const char *path, int typ, int mode, netbuf *nControl,    netbuf **nData){    char buf[256];    int dir;    if ((path == NULL) &&        ((typ == FTPLIB_FILE_WRITE) || (typ == FTPLIB_FILE_READ)))    {	sprintf(nControl->response,                "Missing path argument for file transfer\n");	return 0;    }    sprintf(buf, "TYPE %c", mode);    if (!FtpSendCmd(buf, '2', nControl))	return 0;    switch (typ)    {      case FTPLIB_DIR:	strcpy(buf,"NLST");	dir = FTPLIB_READ;	break;      case FTPLIB_DIR_VERBOSE:	strcpy(buf,"LIST");	dir = FTPLIB_READ;	break;      case FTPLIB_FILE_READ:	strcpy(buf,"RETR");	dir = FTPLIB_READ;	break;      case FTPLIB_FILE_WRITE:	strcpy(buf,"STOR");	dir = FTPLIB_WRITE;	break;      default:	sprintf(nControl->response, "Invalid open type %d\n", typ);	return 0;    }    if (path != NULL)    {        int i = strlen(buf);        buf[i++] = ' ';        if ((strlen(path) + i) >= sizeof(buf))            return 0;        strcpy(&buf[i],path);    }    if (FtpOpenPort(nControl, nData, mode, dir) == -1)	return 0;    if (!FtpSendCmd(buf, '1', nControl))    {	FtpClose(*nData);	*nData = NULL;	return 0;    }    (*nData)->ctrl = nControl;    nControl->data = *nData;    if (nControl->cmode == FTPLIB_PORT)    {	if (!FtpAcceptConnection(*nData,nControl))	{	    FtpClose(*nData);	    *nData = NULL;	    nControl->data = NULL;	    return 0;	}    }    return 1;}/* * FtpRead - read from a data connection */GLOBALDEF int FtpRead(void *buf, int max, netbuf *nData){    int i;    if (nData->dir != FTPLIB_READ)	return 0;    if (nData->buf)        i = readline(buf, max, nData);    else    {        i = socket_wait(nData);	if (i != 1)	    return 0;        i = net_read(nData->handle, buf, max);    }    if (i == -1)	return 0;    nData->xfered += i;    if (nData->idlecb && nData->cbbytes)    {        nData->xfered1 += i;        if (nData->xfered1 > nData->cbbytes)        {	    if (nData->idlecb(nData, nData->xfered, nData->idlearg) == 0)		return 0;            nData->xfered1 = 0;        }    }    return i;}/* * FtpWrite - write to a data connection */GLOBALDEF int FtpWrite(void *buf, int len, netbuf *nData){    int i;    if (nData->dir != FTPLIB_WRITE)	return 0;    if (nData->buf)    	i = writeline(buf, len, nData);    else    {        socket_wait(nData);        i = net_write(nData->handle, buf, len);    }    if (i == -1)	return 0;    nData->xfered += i;    if (nData->idlecb && nData->cbbytes)    {        nData->xfered1 += i;        if (nData->xfered1 > nData->cbbytes)        {            nData->idlecb(nData, nData->xfered, nData->idlearg);            nData->xfered1 = 0;        }    }    return i;}/* * FtpClose - close a data connection */GLOBALDEF int FtpClose(netbuf *nData){    netbuf *ctrl;    switch (nData->dir)    {      case FTPLIB_WRITE:	/* potential problem - if buffer flush fails, how to notify user? */	if (nData->buf != NULL)	    writeline(NULL, 0, nData);      case FTPLIB_READ:	if (nData->buf)	    free(nData->buf);	shutdown(nData->handle,2);	net_close(nData->handle);	ctrl = nData->ctrl;	free(nData);	if (ctrl)	{	    ctrl->data = NULL;	    return(readresp('2', ctrl));	}	return 1;      case FTPLIB_CONTROL:	if (nData->data)	{	    nData->ctrl = NULL;	    FtpClose(nData);	}	net_close(nData->handle);	free(nData);	return 0;    }    return 1;}/* * FtpSite - send a SITE command * * return 1 if command successful, 0 otherwise */GLOBALDEF int FtpSite(const char *cmd, netbuf *nControl){    char buf[256];        if ((strlen(cmd) + 7) > sizeof(buf))        return 0;    sprintf(buf,"SITE %s",cmd);    if (!FtpSendCmd(buf,'2',nControl))	return 0;    return 1;}/* * FtpSysType - send a SYST command * * Fills in the user buffer with the remote system type.  If more * information from the response is required, the user can parse * it out of the response buffer returned by FtpLastResponse(). * * return 1 if command successful, 0 otherwise */GLOBALDEF int FtpSysType(char *buf, int max, netbuf *nControl){    int l = max;    char *b = buf;    char *s;    if (!FtpSendCmd("SYST",'2',nControl))	return 0;    s = &nControl->response[4];    while ((--l) && (*s != ' '))	*b++ = *s++;    *b++ = '\0';    return 1;}/* * FtpMkdir - create a directory at server * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpMkdir(const char *path, netbuf *nControl){    char buf[256];    if ((strlen(path) + 6) > sizeof(buf))        return 0;    sprintf(buf,"MKD %s",path);    if (!FtpSendCmd(buf,'2', nControl))	return 0;    return 1;}/* * FtpChdir - change path at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpChdir(const char *path, netbuf *nControl){    char buf[256];    if ((strlen(path) + 6) > sizeof(buf))        return 0;    sprintf(buf,"CWD %s",path);    if (!FtpSendCmd(buf,'2',nControl))	return 0;    return 1;}/* * FtpCDUp - move to parent directory at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpCDUp(netbuf *nControl){    if (!FtpSendCmd("CDUP",'2',nControl))	return 0;    return 1;}/* * FtpRmdir - remove directory at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpRmdir(const char *path, netbuf *nControl){    char buf[256];    if ((strlen(path) + 6) > sizeof(buf))        return 0;    sprintf(buf,"RMD %s",path);    if (!FtpSendCmd(buf,'2',nControl))	return 0;    return 1;}/* * FtpPwd - get working directory at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpPwd(char *path, int max, netbuf *nControl){    int l = max;    char *b = path;    char *s;    if (!FtpSendCmd("PWD",'2',nControl))	return 0;    s = strchr(nControl->response, '"');    if (s == NULL)	return 0;    s++;    while ((--l) && (*s) && (*s != '"'))	*b++ = *s++;    *b++ = '\0';    return 1;}/* * FtpXfer - issue a command and transfer data * * return 1 if successful, 0 otherwise */static int FtpXfer(const char *localfile, const char *path,	netbuf *nControl, int typ, int mode){    int l,c;    char *dbuf;    FILE *local = NULL;    netbuf *nData;    int rv=1;    if (localfile != NULL)    {	char ac[4] = "w";	if (typ == FTPLIB_FILE_WRITE)	    ac[0] = 'r';	if (mode == FTPLIB_IMAGE)	    ac[1] = 'b';	local = fopen(localfile, ac);	if (local == NULL)	{	    strncpy(nControl->response, strerror(errno),                    sizeof(nControl->response));	    return 0;	}    }    if (local == NULL)	local = (typ == FTPLIB_FILE_WRITE) ? stdin : stdout;    if (!FtpAccess(path, typ, mode, nControl, &nData))	return 0;    dbuf = malloc(FTPLIB_BUFSIZ);    if (typ == FTPLIB_FILE_WRITE)    {	while ((l = fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0)	    if ((c = FtpWrite(dbuf, l, nData)) < l)	    {		printf("short write: passed %d, wrote %d\n", l, c);		rv = 0;		break;	    }    }    else    {    	while ((l = FtpRead(dbuf, FTPLIB_BUFSIZ, nData)) > 0)	    if (fwrite(dbuf, 1, l, local) <= 0)	    {		perror("localfile write");		rv = 0;		break;	    }    }    free(dbuf);    fflush(local);    if (localfile != NULL)	fclose(local);    FtpClose(nData);    return rv;}/* * FtpNlst - issue an NLST command and write response to output * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpNlst(const char *outputfile, const char *path,	netbuf *nControl){    return FtpXfer(outputfile, path, nControl, FTPLIB_DIR, FTPLIB_ASCII);}/* * FtpDir - issue a LIST command and write response to output * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpDir(const char *outputfile, const char *path, netbuf *nControl){    return FtpXfer(outputfile, path, nControl, FTPLIB_DIR_VERBOSE, FTPLIB_ASCII);}/* * FtpSize - determine the size of a remote file * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpSize(const char *path, int *size, char mode, netbuf *nControl){    char cmd[256];    int resp,sz,rv=1;    if ((strlen(path) + 7) > sizeof(cmd))        return 0;    sprintf(cmd, "TYPE %c", mode);    if (!FtpSendCmd(cmd, '2', nControl))	return 0;    sprintf(cmd,"SIZE %s",path);    if (!FtpSendCmd(cmd,'2',nControl))	rv = 0;    else    {	if (sscanf(nControl->response, "%d %d", &resp, &sz) == 2)	    *size = sz;	else	    rv = 0;    }       return rv;}/* * FtpModDate - determine the modification date of a remote file * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpModDate(const char *path, char *dt, int max, netbuf *nControl){    char buf[256];    int rv = 1;    if ((strlen(path) + 7) > sizeof(buf))        return 0;    sprintf(buf,"MDTM %s",path);    if (!FtpSendCmd(buf,'2',nControl))	rv = 0;    else	strncpy(dt, &nControl->response[4], max);    return rv;}/* * FtpGet - issue a GET command and write received data to output * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpGet(const char *outputfile, const char *path,	char mode, netbuf *nControl){    return FtpXfer(outputfile, path, nControl, FTPLIB_FILE_READ, mode);}/* * FtpPut - issue a PUT command and send data from input * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpPut(const char *inputfile, const char *path, char mode,	netbuf *nControl){    return FtpXfer(inputfile, path, nControl, FTPLIB_FILE_WRITE, mode);}/* * FtpRename - rename a file at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpRename(const char *src, const char *dst, netbuf *nControl){    char cmd[256];    if (((strlen(src) + 7) > sizeof(cmd)) ||        ((strlen(dst) + 7) > sizeof(cmd)))        return 0;    sprintf(cmd,"RNFR %s",src);    if (!FtpSendCmd(cmd,'3',nControl))	return 0;    sprintf(cmd,"RNTO %s",dst);    if (!FtpSendCmd(cmd,'2',nControl))	return 0;    return 1;}/* * FtpDelete - delete a file at remote * * return 1 if successful, 0 otherwise */GLOBALDEF int FtpDelete(const char *fnm, netbuf *nControl){    char cmd[256];    if ((strlen(fnm) + 7) > sizeof(cmd))        return 0;    sprintf(cmd,"DELE %s",fnm);    if (!FtpSendCmd(cmd,'2', nControl))	return 0;    return 1;}/* * FtpQuit - disconnect from remote * * return 1 if successful, 0 otherwise */GLOBALDEF void FtpQuit(netbuf *nControl){    if (nControl->dir != FTPLIB_CONTROL)	return;    FtpSendCmd("QUIT",'2',nControl);    net_close(nControl->handle);    free(nControl->buf);    free(nControl);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人精品在线观看| 欧美精品一区二区三区在线播放| 日韩美女精品在线| 懂色中文一区二区在线播放| 国产午夜精品一区二区| 国产高清久久久久| 中文字幕亚洲精品在线观看| eeuss鲁片一区二区三区在线看| 国产精品久久久久久久裸模| 99久久夜色精品国产网站| 亚洲综合在线免费观看| 欧美精品久久久久久久久老牛影院| 亚洲国产成人精品视频| 欧美成人a∨高清免费观看| 国产成人免费网站| 亚洲在线免费播放| 91精品久久久久久久99蜜桃| 国产精品自拍毛片| 国产精品剧情在线亚洲| 欧美日韩在线播放三区四区| 韩国女主播一区| 亚洲天堂网中文字| 日韩欧美电影一二三| 成人免费va视频| 一区二区三区成人| 精品国产伦理网| 一本色道久久加勒比精品| 午夜视频在线观看一区二区| 久久久精品一品道一区| 欧美在线观看一二区| 美女视频黄久久| 亚洲日本va午夜在线电影| 日韩视频一区二区三区在线播放| 懂色中文一区二区在线播放| 亚洲成在线观看| 国产精品免费视频观看| 欧美巨大另类极品videosbest | 92精品国产成人观看免费| 日韩极品在线观看| 综合中文字幕亚洲| 精品免费视频一区二区| 在线观看亚洲成人| 国产v综合v亚洲欧| 免费欧美在线视频| 一区二区三区四区视频精品免费| 久久这里只有精品视频网| 欧美视频在线一区| 99国产欧美久久久精品| 黄色成人免费在线| 午夜久久久久久久久久一区二区| 国产精品久久久久婷婷| 日韩精品资源二区在线| 欧美午夜在线一二页| 高清shemale亚洲人妖| 捆绑紧缚一区二区三区视频| 亚洲综合色视频| 国产精品欧美久久久久一区二区 | 欧美午夜片在线看| jizzjizzjizz欧美| 丰满白嫩尤物一区二区| 精品一区二区免费看| 石原莉奈在线亚洲二区| 一区二区三区在线免费视频| 国产精品欧美一区喷水| 国产性天天综合网| 欧美成人一区二区三区片免费 | 欧美电影在线免费观看| 色国产综合视频| 99精品久久只有精品| 国产91在线观看| 国产成人免费在线| 国产成人av影院| 国产精品影音先锋| 国产成人综合在线| 国产精品一区2区| 国产高清精品网站| 高清不卡一二三区| 不卡一区二区中文字幕| 成人免费视频网站在线观看| 国产精品一卡二卡| 国产成人激情av| 成人av电影在线观看| 从欧美一区二区三区| 大胆亚洲人体视频| 91免费视频观看| 91福利精品第一导航| 欧美色图一区二区三区| 777久久久精品| 日韩免费观看2025年上映的电影| 日韩欧美一区在线观看| 精品国产乱码久久久久久牛牛| 2024国产精品| 综合久久国产九一剧情麻豆| 亚洲欧美一区二区不卡| 一区二区三区小说| 日韩中文字幕区一区有砖一区| 丝袜美腿亚洲综合| 国内偷窥港台综合视频在线播放| 国产成人综合视频| 91免费国产视频网站| 欧美性xxxxxxxx| 日韩午夜激情av| 国产无一区二区| 亚洲美女视频一区| 蜜桃视频一区二区| av动漫一区二区| 欧美浪妇xxxx高跟鞋交| 久久久久久久久久久99999| 亚洲视频一区二区免费在线观看| 亚洲自拍都市欧美小说| 久久99精品国产| 99久久国产综合色|国产精品| 欧美色图激情小说| 国产亚洲成av人在线观看导航| 亚洲婷婷综合色高清在线| 日本aⅴ精品一区二区三区 | 一本大道av伊人久久综合| 欧美日韩久久不卡| 国产欧美一区二区精品性色超碰| 亚洲一区中文日韩| 国产电影精品久久禁18| 欧美日韩高清一区二区| 中文字幕制服丝袜成人av | 高清国产一区二区| 欧美区一区二区三区| 国产精品美女一区二区三区| 日韩成人av影视| 91蜜桃免费观看视频| 久久综合狠狠综合久久综合88| 亚洲国产综合91精品麻豆| 国产成都精品91一区二区三| 欧美一区日韩一区| 国产精品你懂的在线| 爽好多水快深点欧美视频| 亚洲女爱视频在线| 国产精品小仙女| 在线成人av网站| 久久久久久久av麻豆果冻| 午夜亚洲国产au精品一区二区| 国产激情精品久久久第一区二区 | 亚洲精品videosex极品| 国产精品综合网| 欧美日韩黄色一区二区| 中文无字幕一区二区三区| 天天综合色天天综合| 国产一区久久久| 欧美日韩一区二区三区视频| 久久久不卡影院| 日韩激情一区二区| 94-欧美-setu| 亚洲欧洲精品一区二区三区不卡| 日韩精品电影在线观看| 99久久精品国产导航| 欧美精品一区在线观看| 亚洲香肠在线观看| 国产精品一区久久久久| 制服.丝袜.亚洲.另类.中文| 亚洲视频图片小说| 国产不卡在线视频| 国产婷婷一区二区| 美日韩一级片在线观看| 欧美伊人精品成人久久综合97| 国产精品你懂的在线欣赏| 成人免费看视频| 久久久精品一品道一区| 麻豆传媒一区二区三区| 欧美日本国产视频| 亚洲成人手机在线| 日本精品裸体写真集在线观看| 中文字幕在线一区| 国产99久久久国产精品免费看 | 国产片一区二区| 久久99最新地址| 日韩一区和二区| 首页国产欧美久久| 日韩丝袜情趣美女图片| 日本成人在线一区| 日韩欧美中文字幕公布| 亚洲国产美国国产综合一区二区| 欧美日韩国产小视频在线观看| 亚洲美女一区二区三区| 91蜜桃在线观看| 亚洲小少妇裸体bbw| 欧美一区日韩一区| 久久se精品一区二区| 久久久久久亚洲综合| 丁香亚洲综合激情啪啪综合| 国产欧美精品一区二区三区四区| 国内外成人在线| 国产免费久久精品| 美女一区二区视频| 欧美激情在线一区二区三区| 成人免费看片app下载| 亚洲乱码国产乱码精品精可以看| 欧美三级中文字幕在线观看| 午夜精品福利视频网站| 日韩一卡二卡三卡| 国产成人一区在线| 亚洲444eee在线观看| 精品国产一区二区三区四区四 |