Administrator
Administrator
发布于 2024-11-25 / 13 阅读
0
0

C语言某些函数讲解

标准库函数

  • 内存管理
    • malloc:分配内存。
    • memset:初始化内存。
    • bzero:清零内存。
    • free:释放内存(未显式使用)。
  • 输入输出
    • printf:格式化输出到标准输出。
    • fprintf:格式化输出到文件流。
    • sprintf:格式化输出到字符串。
    • perror:打印标准错误信息。
    • fflush:刷新文件流。
    • fopen:打开文件。
    • fclose:关闭文件。
  • 程序控制
    • exit:终止程序。
    • sleep:暂停程序执行一段时间。
  • 字符串处理
    • atoi:将字符串转换为整数。

网络相关函数

  • 套接字操作
    • socket:创建套接字。
    • sendto:通过UDP协议发送数据。
    • recvfrom:通过UDP协议接收数据。
    • close:关闭文件描述符或套接字。
  • IP地址处理
    • inet_addr:将点分十进制的IP地址转换为网络字节序的整数。
    • inet_ntoa:将网络字节序的IP地址转换为点分十进制字符串。
  • 字节序转换
    • htonl:将主机字节序转换为网络字节序(长整数)。
    • ntohl:将网络字节序转换为主机字节序(长整数)。
    • htons:将主机字节序转换为网络字节序(短整数)。
    • ntohs:将网络字节序转换为主机字节序(短整数)。

多线程相关函数

  • 线程操作
    • pthread_create:创建线程。

信号处理函数

  • 信号处理
    • signal:设置信号处理函数。

以下是代码中涉及函数的使用方法及简要说明,按类别整理:


标准库函数

内存管理

  1. malloc

    void *malloc(size_t size);
    
    • 用于分配指定字节大小的内存。
    • 示例:
      char *buffer = (char *)malloc(1024); // 分配 1024 字节内存
      
  2. memset

    void *memset(void *ptr, int value, size_t num);
    
    • 用于将内存块设置为指定值。
    • 示例:
      memset(buffer, 0, 1024); // 将 buffer 初始化为 0
      
  3. bzero

    void bzero(void *s, size_t n);
    
    • 清零内存,相当于 memset(ptr, 0, num)
    • 示例:
      bzero(buffer, 1024); // 清零 buffer
      
  4. free

    void free(void *ptr);
    
    • 用于释放由 malloc 分配的内存。
    • 示例:
      free(buffer); // 释放内存
      

输入输出

  1. printf

    int printf(const char *format, ...);
    
    • 格式化输出到标准输出。
    • 示例:
      printf("Found servers: %d\n", found_srvs);
      
  2. fprintf

    int fprintf(FILE *stream, const char *format, ...);
    
    • 格式化输出到文件。
    • 示例:
      fprintf(fd, "%s %d\n", inet_ntoa(saddr.sin_addr), body_length);
      
  3. sprintf

    int sprintf(char *str, const char *format, ...);
    
    • 格式化输出到字符串。
    • 示例:
      sprintf(temp, "%d%%", percent_done);
      
  4. perror

    void perror(const char *str);
    
    • 打印错误消息。
    • 示例:
      perror("Socket creation failed");
      
  5. fflush

    int fflush(FILE *stream);
    
    • 刷新文件流。
    • 示例:
      fflush(fd);
      
  6. fopen

    FILE *fopen(const char *filename, const char *mode);
    
    • 打开文件。
    • 示例:
      fd = fopen("output.txt", "a");
      
  7. fclose

    int fclose(FILE *stream);
    
    • 关闭文件。
    • 示例:
      fclose(fd);
      

程序控制

  1. exit

    void exit(int status);
    
    • 终止程序。
    • 示例:
      exit(-1);
      
  2. sleep

    unsigned int sleep(unsigned int seconds);
    
    • 暂停程序执行。
    • 示例:
      sleep(1); // 暂停 1 秒
      

字符串处理

  1. atoi
    int atoi(const char *str);
    
    • 将字符串转换为整数。
    • 示例:
      int threads = atoi(argv[4]);
      

网络相关函数

套接字操作

  1. socket

    int socket(int domain, int type, int protocol);
    
    • 创建套接字。
    • 示例:
      int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
      
  2. sendto

    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                   const struct sockaddr *dest_addr, socklen_t addrlen);
    
    • 发送数据到指定地址。
    • 示例:
      sendto(sock, payload, payload_size, 0, 
             (struct sockaddr *)&servaddr, sizeof(servaddr));
      
  3. recvfrom

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                     struct sockaddr *src_addr, socklen_t *addrlen);
    
    • 接收数据。
    • 示例:
      data_size = recvfrom(sock_raw, buffer, 65536, 0,
                           (struct sockaddr *)&saddr, &saddr_size);
      
  4. close

    int close(int fd);
    
    • 关闭文件描述符。
    • 示例:
      close(sock);
      

IP地址处理

  1. inet_addr

    in_addr_t inet_addr(const char *cp);
    
    • 将IP地址字符串转换为网络字节序。
    • 示例:
      start = inet_addr(argv[1]);
      
  2. inet_ntoa

    char *inet_ntoa(struct in_addr in);
    
    • 将网络字节序的IP地址转换为字符串。
    • 示例:
      inet_ntoa(saddr.sin_addr);
      
  3. 字节序转换

    • htonl:主机到网络字节序(长整数)。
      unsigned long network_order = htonl(host_order);
      
    • ntohl:网络到主机字节序(长整数)。
      unsigned long host_order = ntohl(network_order);
      
    • htons:主机到网络字节序(短整数)。
      unsigned short network_order = htons(host_order);
      
    • ntohs:网络到主机字节序(短整数)。
      unsigned short host_order = ntohs(network_order);
      

多线程相关函数

  1. pthread_create
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                       void *(*start_routine)(void *), void *arg);
    
    • 创建线程。
    • 示例:
      pthread_create(&thread, NULL, &flood, (void *)i);
      

信号处理函数

  1. signal
    void (*signal(int signum, void (*handler)(int)))(int);
    
    • 设置信号处理函数。
    • 示例:
      signal(SIGINT, &sighandler);
      

说明

这些函数是代码的核心组成部分,其示例均基于代码中的实际使用场景。


评论