标准库函数
- 内存管理
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
:设置信号处理函数。
以下是代码中涉及函数的使用方法及简要说明,按类别整理:
标准库函数
内存管理
malloc
void *malloc(size_t size);
- 用于分配指定字节大小的内存。
- 示例:
char *buffer = (char *)malloc(1024); // 分配 1024 字节内存
memset
void *memset(void *ptr, int value, size_t num);
- 用于将内存块设置为指定值。
- 示例:
memset(buffer, 0, 1024); // 将 buffer 初始化为 0
bzero
void bzero(void *s, size_t n);
- 清零内存,相当于
memset(ptr, 0, num)
。 - 示例:
bzero(buffer, 1024); // 清零 buffer
- 清零内存,相当于
free
void free(void *ptr);
- 用于释放由
malloc
分配的内存。 - 示例:
free(buffer); // 释放内存
- 用于释放由
输入输出
printf
int printf(const char *format, ...);
- 格式化输出到标准输出。
- 示例:
printf("Found servers: %d\n", found_srvs);
fprintf
int fprintf(FILE *stream, const char *format, ...);
- 格式化输出到文件。
- 示例:
fprintf(fd, "%s %d\n", inet_ntoa(saddr.sin_addr), body_length);
sprintf
int sprintf(char *str, const char *format, ...);
- 格式化输出到字符串。
- 示例:
sprintf(temp, "%d%%", percent_done);
perror
void perror(const char *str);
- 打印错误消息。
- 示例:
perror("Socket creation failed");
fflush
int fflush(FILE *stream);
- 刷新文件流。
- 示例:
fflush(fd);
fopen
FILE *fopen(const char *filename, const char *mode);
- 打开文件。
- 示例:
fd = fopen("output.txt", "a");
fclose
int fclose(FILE *stream);
- 关闭文件。
- 示例:
fclose(fd);
程序控制
exit
void exit(int status);
- 终止程序。
- 示例:
exit(-1);
sleep
unsigned int sleep(unsigned int seconds);
- 暂停程序执行。
- 示例:
sleep(1); // 暂停 1 秒
字符串处理
atoi
int atoi(const char *str);
- 将字符串转换为整数。
- 示例:
int threads = atoi(argv[4]);
网络相关函数
套接字操作
socket
int socket(int domain, int type, int protocol);
- 创建套接字。
- 示例:
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
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));
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);
close
int close(int fd);
- 关闭文件描述符。
- 示例:
close(sock);
IP地址处理
inet_addr
in_addr_t inet_addr(const char *cp);
- 将IP地址字符串转换为网络字节序。
- 示例:
start = inet_addr(argv[1]);
inet_ntoa
char *inet_ntoa(struct in_addr in);
- 将网络字节序的IP地址转换为字符串。
- 示例:
inet_ntoa(saddr.sin_addr);
字节序转换
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);
多线程相关函数
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);
信号处理函数
signal
void (*signal(int signum, void (*handler)(int)))(int);
- 设置信号处理函数。
- 示例:
signal(SIGINT, &sighandler);
说明
这些函数是代码的核心组成部分,其示例均基于代码中的实际使用场景。