
FTP_nb_put 함수는 네트워크 버퍼를 사용하여 파일을 전송할 때 사용하는 함수로, 비동기적으로 파일을 전송할 수 있습니다. 이 함수는 send() 함수와 유사하지만, send() 함수는 블로킹 방식으로 파일을 전송하지만, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.
FTP_nb_put 함수를 사용하려면, 먼저 네트워크 버퍼를 초기화해야 합니다. 이 버퍼는 파일을 전송할 때 사용하는 버퍼입니다. 버퍼를 초기화한 후, FTP_nb_put 함수를 사용하여 파일을 전송할 수 있습니다.
FTP_nb_put 함수의 사용법은 다음과 같습니다.
#hostingforum.kr
c
int FTP_nb_put(int sock, const char *buf, size_t len, struct pollfd *pfd);
* sock: FTP 서버와의 소켓
* buf: 파일 내용을 담은 버퍼
* len: 버퍼에 담긴 파일 내용의 크기
* pfd: 폴링 정보
FTP_nb_put 함수를 사용하여 파일을 전송할 때, 폴링 정보를 전달해야 합니다. 폴링 정보는 FTP_nb_put 함수가 파일 전송을 완료할 때까지 대기할 수 있는 시간을 지정합니다.
폴링 정보를 전달하는 방법은 다음과 같습니다.
#hostingforum.kr
c
struct pollfd pfd;
pfd.fd = sock;
pfd.events = POLLOUT;
pfd.revents = 0;
if (FTP_nb_put(sock, buf, len, &pfd) == 0) {
// 파일 전송 완료
} else {
// 파일 전송 실패
}
폴링 정보를 전달하지 않으면, FTP_nb_put 함수는 블로킹 방식으로 파일을 전송합니다. 폴링 정보를 전달하면, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.
FTP_nb_put 함수를 사용하여 파일을 전송하는 예제는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PORT "21"
#define USER "anonymous"
#define PASSWD "anonymous"
#define RENAME "test.txt"
#define SIZE 1024
int main() {
int sock;
struct sockaddr_in server_addr;
char buffer[SIZE];
int bytes_received;
struct pollfd pfd;
// FTP 서버 연결
sock = socket(AF_INET, SOCK_STREAM, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(21);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
// FTP 서버에 로그인
send(sock, "USER " USER "\r\n", strlen("USER " USER "\r\n"), 0);
send(sock, "PASS " PASSWD "\r\n", strlen("PASS " PASSWD "\r\n"), 0);
// FTP 서버에 파일 전송
send(sock, "PUT " RENAME "\r\n", strlen("PUT " RENAME "\r\n"), 0);
// 파일 내용 전송
int fd = open(RENAME, O_RDONLY);
char *buf = malloc(SIZE);
while (1) {
bytes_received = read(fd, buf, SIZE);
if (bytes_received <= 0) break;
pfd.fd = sock;
pfd.events = POLLOUT;
pfd.revents = 0;
if (FTP_nb_put(sock, buf, bytes_received, &pfd) == 0) {
// 파일 전송 완료
} else {
// 파일 전송 실패
}
}
free(buf);
close(fd);
// FTP 서버에 파일 이름 변경
send(sock, "RNFR " RENAME "\r\n", strlen("RNFR " RENAME "\r\n"), 0);
send(sock, "RNTO " RENAME "\r\n", strlen("RNTO " RENAME "\r\n"), 0);
close(sock);
return 0;
}
이 예제는 FTP_nb_put 함수를 사용하여 파일을 전송하는 방법을 보여줍니다. FTP_nb_put 함수를 사용하여 파일을 전송할 때, 폴링 정보를 전달해야 합니다. 폴링 정보를 전달하지 않으면, FTP_nb_put 함수는 블로킹 방식으로 파일을 전송합니다. 폴링 정보를 전달하면, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.
2025-06-07 05:19