目录
多线程编程
网络编程
Linux C程序开发是指在Linux操作系统下使用C语言进行开发的过程。Linux是一种开源的操作系统,具有稳定性、安全性和灵活性等优点,因此在很多领域都得到了广泛的应用。
多线程编程
多线程编程是指在一个程序中同时运行多个线程,每个线程都有自己的执行路径和执行状态。多线程编程可以提高程序的并发性和响应性,使得程序能够更好地利用多核处理器的性能。
import threading
def print_numbers():
for i in range(1, 11):
print(i)
def print_letters():
for letter in 'abcdefghij':
print(letter)
if __name__ == '__main__':
# 创建两个线程,分别执行print_numbers和print_letters函数
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)
# 启动线程
thread1.start()
thread2.start()
# 等待两个线程执行完毕
thread1.join()
thread2.join()
print("程序执行完毕")
运行以上代码,会同时输出数字和字母,例如:
这个例子中,我们创建了两个线程,一个线程负责打印数字,另一个线程负责打印字母。
通过调用start()
方法启动线程,线程会在后台并发执行。
然后,通过调用join()
方法,主线程会等待两个子线程执行完毕后再继续执行。
最后,程序输出"程序执行完毕"。
网络编程
网络编程是指在程序中使用网络协议进行数据传输和通信的过程。在Linux中,可以使用Socket编程来实现网络编程,通过创建套接字、建立连接、发送和接收数据等操作来实现网络通信。
代码实现
下面是一个简单的示例代码,演示了在Linux下使用C语言进行多线程编程和网络编程的过程:
#include <stdio.h> // 标准输入输出库
#include <stdlib.h> // 标准库函数库
#include <unistd.h> // 提供对操作系统的访问功能
#include <pthread.h> // 线程操作库
#include <sys/socket.h> // 提供套接字相关的函数和结构体
#include <netinet/in.h> // 提供互联网地址族相关的函数和结构体
#include <string.h> // 字符串操作库
#define PORT 8080
#define MAX_CLIENTS 5
void *client_handler(void *arg) {
int client_socket = *(int *)arg; // 获取客户端套接字
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
read(client_socket, buffer, sizeof(buffer)); // 从客户端读取数据
printf("Received message from client: %s\n", buffer);
char *response = "Hello from server!";
write(client_socket, response, strlen(response)); // 向客户端发送响应
close(client_socket); // 关闭客户端套接字
pthread_exit(NULL);
}
int main() {
int server_socket, client_socket;
struct sockaddr_in server_address, client_address;
int address_length = sizeof(server_address);
pthread_t threads[MAX_CLIENTS];
// 创建服务器套接字
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址和端口
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(PORT);
// 绑定服务器套接字到指定地址和端口
if (bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
perror("Failed to bind socket");
exit(EXIT_FAILURE);
}
// 监听客户端连接请求
if (listen(server_socket, MAX_CLIENTS) < 0) {
perror("Failed to listen");
exit(EXIT_FAILURE);
}
printf("Server listening on port %d\n", PORT);
int i = 0;
while (1) {
// 接受客户端连接请求
client_socket = accept(server_socket, (struct sockaddr *)&client_address, (socklen_t *)&address_length);
if (client_socket < 0) {
perror("Failed to accept");
exit(EXIT_FAILURE);
}
// 创建线程处理客户端请求
if (pthread_create(&threads[i], NULL, client_handler, &client_socket) != 0) {
perror("Failed to create thread");
exit(EXIT_FAILURE);
}
i++;
}
// 等待所有线程结束
for (int j = 0; j < i; j++) {
pthread_join(threads[j], NULL);
}
// 关闭服务器套接字
close(server_socket);
return 0;
}