getcwd()
函數用于獲取當前工作目錄的絕對路徑
以下是一個使用 getcwd()
處理網絡路徑的示例:
#include <iostream>
#include <cstdio>
#include <limits.h>
#include <unistd.h>
#include <sys/stat.h>
#include <netdb.h>
#include <arpa/inet.h>
int main() {
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != nullptr) {
std::cout << "Current working directory: " << cwd << std::endl;
} else {
perror("getcwd() error");
return 1;
}
// 處理網絡路徑的示例
struct addrinfo hints, *servinfo;
int status;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // 使用IPv4或IPv6
hints.ai_socktype = SOCK_STREAM; // 使用TCP
// 獲取服務器地址信息
status = getaddrinfo("example.com", "80", &hints, &servinfo);
if (status != 0) {
perror("getaddrinfo() error");
return 1;
}
// 連接到服務器
int sockfd = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
if (sockfd == -1) {
perror("socket() error");
return 1;
}
// 連接到服務器
if (connect(sockfd, servinfo->ai_addr, servinfo->ai_addrlen) == -1) {
perror("connect() error");
return 1;
}
// 發送HTTP請求
std::string request = "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n";
if (send(sockfd, request.c_str(), request.size(), 0) == -1) {
perror("send() error");
return 1;
}
// 接收服務器響應
while (true) {
char buffer[4096];
ssize_t received = recv(sockfd, buffer, sizeof(buffer) - 1, 0);
if (received == -1) {
perror("recv() error");
break;
} else if (received == 0) {
break;
}
buffer[received] = '\0';
std::cout << "Server response: " << buffer << std::endl;
}
// 關閉套接字和服務器地址信息
close(sockfd);
freeaddrinfo(servinfo);
return 0;
}
在這個示例中,我們首先使用 getcwd()
獲取當前工作目錄的絕對路徑。然后,我們使用 getaddrinfo()
獲取服務器地址信息,并使用 socket()
和 connect()
建立與服務器的連接。最后,我們發送HTTP請求并接收服務器的響應。
請注意,這個示例僅用于演示目的,實際應用中可能需要根據具體需求進行調整。