目录
多线程编程
网络编程
Linux C程序开发是指在Linux操作系统下使用C语言进行开发的过程。Linux是一种开源的操作系统,具有稳定性、安全性和灵活性等优点,因此在很多领域都得到了广泛的应用。
多线程编程
多线程编程是指在一个程序中同时运行多个线程,每个线程都有自己的执行路径和执行状态。多线程编程可以提高程序的并发性和响应性,使得程序能够更好地利用多核处理器的性能。
import threadingdef 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 5void *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;
}