Linux C程序开发,多线程编程、网络编程

目录

多线程编程

网络编程


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;
}

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/131627927