首先来看代码
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/wait.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd…… 阅读全文
Tag Archives: C
Linux TCP UDP 混合
基本的思路是这样的:在服务器端,有两个机器,一个对外开启 TCP 监听,然后把监听到的请求内容送到后面的另外一台,或者多台轮询机器上,内网之间使用 UDP,然后等待业务逻辑机器处理完成,这个地方可以做成异步的,然后再返回到用户。
即是这样: client server_front server_back
下面来看代码,首先是 server_fro…… 阅读全文
共享内存的读写
首先我们需要一个 shm_com.h
#ifndef _SHM_COM_H_
#define _SHM_COM_H_
#define TEXT_SZ 2048
struct shared_use_st {
int written_by_you;
char some_text[TEXT_SZ];
};
#endif /* _SHM_COM_H */
然后是 shm1.cpp
#include <stdio.h>
#include <stdlib.h>
#include <unis…… 阅读全文
不同服务器端模型在并发请求下的表现差异
一般来说,服务器的模型有下面几种:
单进程单线程
多进程(一个请求对应一个进程,Apache 之类貌似就是这个)
多线程(一个请求对应一个线程,这个挺少见到的)
select / poll
epoll
它们的差别可以看这个,http://www.cnblogs.com/sharra/…
因为需要了解底层设备访问的原理,所以惯用高层应用语言的我,需要了…… 阅读全文
二级指针删除单向链表
今晚在这里看到一篇文章,http://coolshell.cn/articles/8…,原文给的是代码片段,本着动手实践的原则,另外顺便复习一下链表,写了下代码
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
int n;
struct _node *next;
} node;
typedef int (* remove_fn)(node const *…… 阅读全文
signal 在 c99 下的差异
在写一个 minishell 的时候,需要捕捉从键盘输入的 ctrl+c 产生的 SIGINT 信号,转入自己的处理函数,代码大致如下
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
int shell_loop() {
setup();
COMBINE_COMMAND cmd;
while (1) {
…… 阅读全文
pipe 函数产生的文件描述符
我们知道 pipe 可以产生一对管道,用于两个进程之间的单工通信,今天在接触一个代码的时候,发现他有一个做法:为每个进程都准备读写管道的文件描述符,同时,赋初始值为 0 和 1,然后根据需要,再进行或者不进行 pipe 管道的创建,之后进行一些业务逻辑,在后面,进行一个硬编码的比较:如果该进程的管道文件描述符为 0…… 阅读全文
使用 C 操作 MySQL 时的转义
翻阅了一下文档,C 的 API 操作 MySQL 的时候没有参数化查询的接口,于是就简单的做一个转义,其实照着官方文档,很简单,直接附上代码
#include <stdio.h>
#include <Windows.h>
#include "mysql.h"
#define TMP_SIZE 256
#define T_SIZE 1024
#define QUERY_SIZE 4096
int insert_r…… 阅读全文
使用 C 操作 MySQL
最近在做一个 twitter 的数据分析,要导一些个数据到数据库中,数据量在亿行这个数量级,由于没什么经验,打算先搞个几百万或者千万行试试,在写导入的时候,由于贪图 PHP 和 MySQL 的无缝配合,所以拿着 PHP 就上了,结果发现效果惨不忍睹,效率完全没法满足需求,于是开始考虑转向 C,在网上搜罗了好一会,C 连接 MySQ…… 阅读全文
字符串转浮点数
今天看到一个题,让把字符串转成浮点数,列了一下,需要注意的应该就是这几点
前导空白字符
符号位
前导零
#include <stdio.h>
#include <string.h>
#include <math.h>
double a2f(char *str) {
// leading space
while (*str==' ' || *str=='t') {
str++;
}
// judge sign
int sign = 1;…… 阅读全文