在 Linux C++ 开发中进行数据交互,通常需要使用文件、套接字(socket)、共享内存、信号(signals)等机制
在 Linux C++ 中,可以使用 C++ 的标准库中的fstream头文件进行文件操作。以下是一些基本操作:
#include <fstream>
#include <iostream>
int main() {
std::ifstream file("example.txt");
if (file.is_open()) {
std::string line;
while (getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
} else {
std::cout << "无法打开文件" << std::endl;
}
return 0;
}
#include <fstream>
#include <iostream>
int main() {
std::ofstream file("example.txt");
if (file.is_open()) {
file << "Hello, World!" << std::endl;
file.close();
} else {
std::cout << "无法打开文件" << std::endl;
}
return 0;
}
套接字是一种在不同计算机之间进行通信的网络编程技术。在 Linux C++ 中,可以使用 socket 库进行套接字编程。以下是一个简单的 TCP 服务器和客户端示例:
#include <iostream>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
int main() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd == -1) {
std::cerr << "创建套接字失败" << std::endl;
return 1;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(8080);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "绑定套接字失败" << std::endl;
return 1;
}
if (listen(server_fd, 10) == -1) {
std::cerr << "监听套接字失败" << std::endl;
return 1;
}
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_fd == -1) {
std::cerr << "接受客户端连接失败" << std::endl;
return 1;
}
char buffer[1024];
read(client_fd, buffer, sizeof(buffer));
std::cout << "收到消息: " << buffer << std::endl;
send(client_fd, "Hello from server!", strlen("Hello from server!"), 0);
close(client_fd);
close(server_fd);
return 0;
}
#include <iostream>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
int main() {
int client_fd = socket(AF_INET, SOCK_STREAM, 0);
if (client_fd == -1) {
std::cerr << "创建套接字失败" << std::endl;
return 1;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
std::cerr << "转换 IP 地址失败" << std::endl;
return 1;
}
if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
std::cerr << "连接服务器失败" << std::endl;
return 1;
}
send(client_fd, "Hello from client!", strlen("Hello from client!"), 0);
char buffer[1024];
read(client_fd, buffer, sizeof(buffer));
std::cout << "收到消息: " << buffer << std::endl;
close(client_fd);
return 0;
}
共享内存是一种在多个进程之间共享数据的方法。在 Linux C++ 中,可以使用 System V IPC 或 POSIX 共享内存 API 进行共享内存编程。以下是一个简单的共享内存示例:
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
int main() {
key_t key = ftok("shmfile", 65);
int shmid = shmget(key, 1024, 0644 | IPC_CREAT);
if (shmid == -1) {
std::cerr << "创建共享内存失败" << std::endl;
return 1;
}
char *data = (char *)shmat(shmid, nullptr, 0);
if (data == (char *)(-1)) {
std::cerr << "附加共享内存失败" << std::endl;
return 1;
}
strcpy(data, "Hello from server!");
shmdt(data);
shmctl(shmid, IPC_RMID, nullptr);
return 0;
}
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
int main() {
key_t key = ftok("shmfile", 65);
int shmid = shmget(key, 1024, 0644 | IPC_CREAT);
if (shmid == -1) {
std::cerr << "创建共享内存失败" << std::endl;
return 1;
}
char *data = (char *)shmat(shmid, nullptr, 0);
if (data == (char *)(-1)) {
std::cerr << "附加共享内存失败" << std::endl;
return 1;
}
std::cout << "收到消息: " << data << std::endl;
shmdt(data);
shmctl(shmid, IPC_RMID, nullptr);
return 0;
}
信号是一种在 Linux 系统中进行进程间通信的方法。在 C++ 中,可以使用 signal 库处理信号。以下是一个简单的信号示例:
#include <iostream>
#include <signal.h>
#include <unistd.h>
void handle_signal(int sig) {
std::cout << "收到信号: " << sig << std::endl;
}
int main() {
signal(SIGINT, handle_signal);
while (true) {
std::cout << "服务器正在运行..." << std::endl;
sleep(1);
}
return 0;
}
#include <iostream>
#include <signal.h>
#include <unistd.h>
void handle_signal(int sig) {
std::cout << "收到信号: " << sig << std::endl;
}
int main() {
signal(SIGINT, handle_signal);
while (true) {
std::cout << "客户端正在运行..." << std::endl;
sleep(1);
}
return 0;
}
这些只是 Linux C++ 开发中进行数据交互的一些基本方法。实际应用中,可能需要根据具体需求选择合适的通信方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。