本次博客用于记录协作开发基于socket传图过程中所学内容。
客户端代码
代码框架
接收回调 菜单
创建线程
零拷贝机制
字节序
大小端字节序/结构体对齐/gdb调试
socket
fsync刷新缓冲区 read阻塞
文件描述符
C语言读写文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<stdio.h> #include<stdlib.h> int main() { FILE* fp = fopen("./log.txt", "w"); if(fp == NULL){ perror("fopen failed ! \n"); return -1; }
fprintf(fp, "FILE pointer write pattern ! This is a test file . \n"); fclose(fp);
FILE* fp_read = fopen("./log.txt", "r"); if(fp_read == NULL) { perror("fopen read failed ! \n"); return -1; } char buffer[1024]; while(fgets(buffer, sizeof(buffer), fp_read)){ printf("%s \n", buffer); } fclose(fp_read); return 0;
}
|
Cpp读取文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <iostream> #include <fstream> #include <string> int main() { std::ofstream out("./log.txt", std::ios::out|std::ios::binary); if(!out.is_open()){ std::cerr << "open failed ! \n" << std::endl; return -1; } std::string msg = "Hello, this is cpp file descriptor ! \n"; int cnt = 10;
while(cnt --){
out.write(msg.c_str(), msg.size()); } out.close(); return 0;
}
|
校验 MD5 CRC
调试
git
- 合作开发:先git pull 再 git push
- 在gitignore文件中写*png此时远程仓库若没有任何png文件,中再次上传时会自动忽略
- git pull遇到conflict 自动合并出现问题需要手动解决冲突,再次add后commit即可pull
磁盘损坏
粘包
gdb生成调试core文件
服务器代码
代码框架
函数原型
在 C 语言中,nanosleep
函数定义在 <time.h>
头文件中,其原型如下:
1 2 3
| #include <time.h>
int nanosleep(const struct timespec *reqtp, struct timespec *remtp);
|
参数
- **
reqtp
**:指向 timespec
结构的指针,该结构指定了要延迟的时间。timespec
结构包含两个成员:tv_sec
(秒数)和 tv_nsec
(纳秒数)。
- **
remtp
**:指向 timespec
结构的指针,如果函数被信号中断,该结构将被用来存储未休眠的时间。
返回值
- 如果函数成功执行,
nanosleep
返回 0
。
- 如果函数被信号中断,返回一个错误,并将剩余的睡眠时间存储在
remtp
指向的 timespec
结构中。