看到前边多进程的时候就知道肯定后边有多线程,否则只用进程就太重型了。但是使用线程就要碰到数据共享的问题了。 创建线程 C的线程库是pthread.h,使用这个库来操作线程。 使用线程的步骤是: 创建需要在线程中运行的函数 创建一个结构pthread_t pthread_create()创建并立刻运行
开始看C下边的网络编程了。前边的一堆系统编程算是刚消化完基础使用。现在要来看网络编程了。 简单的服务器 网络编程么,只要不是想直接控制TCP/IP协议,一般都会选择抽象程度比较高的套接字来通信。 先来写一个简单的服务器,分这么几步: 创建套接字 把套接字绑定端口 开始监听 接受连接 写套接字信息 创
有了进程,进程之间是互相独立的。可以使用管道来进行进程间通信。在开始之前,先复现一下Head First C中的例子: 多进程读取RSS的例子 #include <time.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#
为何经常要把C和操作系统联系起来,因为一来操作系统就是C写的,二来C要发挥作用,由于比较底层,与操作系统的直接交互非常多。 这次要看看之前看C现代方法时候从来没有接触过的内容,也就是进程和系统调用了。 系统调用初步 stdlib.h中的system()函数就是系统命令行调用。 这个参数接受一个字符串
这一章是经常遇到但是没有仔细深究的一个玩意,叫做动态链接库的解说。原来这是C语言里的概念。 库位置与静态链接 一般linux都带有GCC,而windows则不会。最好还是在linux上运行程序。 之前写过的两个解密和生成验证码的程序: //encoder.c
#include "encoder.h"
竟然还有函数指针,上次在看C语言现代方法第二版的时候压根没有留意到有函数指针。这次要好好看看,感觉有了struct,再有函数指针,一个对象的雏形好像就出来了。 这次是用一个常见的高级语言里的filter函数式编程的方法,给filter函数传递一个函数(所谓传递函数,就是传递一段代码用于执行)来进行过
在C这种没有提供基础数据结构的语言里,最适合自己来学习链表的结构了。 在上次学C的时候,知道了链表的基础,所以写起来还是比较简单的。最基础的单项链表,每一个节点存储数据和指向下一个节点的指针就可以了。 在制作链表的时候,如果使用typedef,一定要给结构起一个名字,因为之后要包含同种类型的指针,会
要开始使用稍微复杂一点的数据结构了,就是结构与联合,当然还会附带枚举。在开始之前,还要再回顾一下make的使用。 make的简单使用 make的使用其实就是按照依赖关系编译,依次将所需的文件,依赖关系,执行的指令放在一个文件中,通过make执行就可以了。 现在使用Clion IDE,无需自己管理ma
上一次学C的时候没有看标准库,这一次看了才发现,原来printf实际上是fprintf的简写,相当于自动传入了stdout作为参数。 输入与输出 这一次就借助一个程序来学习一下标准输入输出与重定向吧。 程序来自于Head First C的第三章的示例程序。用格式化的方式读入数据并且转换成JSON格式
一年多前看C的时候,IDE用的是Dev C++,这一次试过VS,觉得Git控制用起来比较累,也不习惯VS的代码补全,想到JetBrains有个Clion,就下载下来使用了。 环境配置 不过Clion要正确使用,需要配置编译环境,这里记录一下自己是如何折腾的: 由于不想使用重型的VS系列编译器,看到C