1、C语言向一个内存地址写值,
int main() {
int value = 42;
int *ptr = (int *)0x12345678; // Replace with the desired memory address
*ptr = value
2、申请释放内存
申请内存
int *dynamicArray = (int*)malloc(size *sizeof(int));
释放内存
free(dynamicArray)
3、makefile
makefile 我只会模仿改写
makefile的基本思路 是查第一行目标文件有没有的依赖文件,如果没有,就在下面的代码的目标文件中查找,有就执行相应的代码
clean:
rm -f myprogram
行make clean
就会执行clean
目标,删除名为myprogram
的文件
all: main.c utils.c (all 默认)
gcc -o myprogram main.c utils.c
test: myprogram(test 目标名字 myprogram 依赖名字)
./myprogram test_input.txt
执行make 执行all下命令
执行 make test 执行test下命令
4、socket I/O复用
select函数,可以监听的数目有限制,并且每次都调用select函数的时候都需要将fd集合从用户态拷贝到内核态 ,同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
2、po'll 开销也比较大,但是因为fd使用链表这样的话,数目限制就不存在了
3、epoll将主动轮询变成被动通知,当有事情发生时,接收到通知后再去处理,也就是epoll会把哪个流发生哪种i/o事件通知我们,epoll是事件驱动(每个事件关联到fd),epoll底层是红黑树,epoll内部使用事件驱动的机制,内核中维护了一个链表来记录就绪事件,当某个socket有事件发生时,通过回调函数内核将其加入到就绪事件链表中,
当用户调用epoll_wait()函数时,只会返回有事件发生的文件描述符的个数,不需要像select和poll那样进行轮询,大大提高了检测的效率
5、strcpy与strcat
strcpy 地址拷贝
strcat 值拷贝