2015年3月30日示例 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 38 39 40 #include <stdio.h> struct student_st { char c; int score; const char *name; }; static void show_student(struct student_st *stu) { printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu->name); } int main(void) { // method 1: 按照成员声明的顺序初始化 struct student_st s1 = {'A', 91, "Alan"}; show_student(&s1); // method 2: 指定初始化,成员顺序可以不定,Linux 内核多采用此方式 struct student_st s2 = { .name = "YunYun", .c = 'B', .score = 92, }; show_student(&s2); // method 3:……
阅读全文
2015年2月7日概览 在网上看到了一个计算日期间隔的方法,咋一看很高深,仔细看更高神,很巧妙。 先直接代码吧 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 #include <stdio.h>#include <stdlib.h> int day_diff(int year_start, int month_start, int day_start , int year_end, int month_end, int day_end) { int y2, m2, d2; int y1, m1, d1; m1 = (month_start + 9) % 12; y1 = year_start - m1/10; d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1); m2 = (month_end + 9) % 12; y2 = year_end - m2/10; d2 = 365*y2 + y2/4 - y2/100 + y2/400 + (m2*306 +……
阅读全文
2015年2月6日概览 之前有个要把打开的文件清空,然后重新写入的需求,但是使用 ftruncate(fd, 0)后,并没有达到效果,反而文件头部有了'\0',长度比预想的大了。 究其原因是没有使用 lseek 重置文件偏移量,是我太天真了,以为清空文件就会从头开始写入。 文档 首先 man ftruncate 看下帮助手册 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NAME truncate, ftruncate - truncate a file to a specified length SYNOPSIS int truncate(const char *path, off_t length); int……
阅读全文
2014年12月23日概览 如果编译一个项目错误警告太多,非常不好找,所以非常希望输出信息可以带有颜色。 可是 gcc 4.9.0 之前的版本并不支持,很多情况下是不能替换编译器的,比如使用交叉编译器, 也可以使用 colorgcc,但我觉得不是特别好,需要配置,如果使用 Makefile 还要更改编译器设置, 所以我自己动手写了一个,效果还可以,源码在github……
阅读全文
2014年12月11日概览 获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数) 代码 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88……
阅读全文
2014年11月27日概览 在做移植时, 发现了 _splitpath 在 linux 下是没有的,于是决定自己写下,也不难。 首先百科到如下内容: 声明定义 void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext ); 说明 分解路径,把你的完整路径给分割开来,就是一个对字符串进行分割的函数 参数表 1 2 3 4 5 path, Full path(完整路径) drive , Optional drive letter, followed by a colon (:)( 磁盘驱动包含:) dir, Optional directory path, including trailing……
阅读全文
2014年11月24日之前一个朋友想要我教下 Linux 的使用,于是我按照命令的关联性做了一个入门级的教程 1 打开终端的方法(我演示的系统是Linux Mint) A. 点击终端图标 B. 右击桌面,在右键菜单中选择终端 C. Ctrl+alt+t 2 pwd 命令:查看当前路径 “/” 代表根目录,类似 Windows 的 C 盘。 3 cd 命令:更改当前目录 “..” 代表上一级目录,“.” 代表当前目录。 4 ls……
阅读全文
2014年11月7日概览 Google 了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算出来的都不一样)。 废话少说,直接贴代码: (再废一句话,如果只想计算字符串的md5值,把字符串传给 MD5Update 函数一次就好,示例:github) 源码 (github 源码……
阅读全文
2014年10月27日注: libcurl 入门指南( the tutorial ): http://curl.haxx.se/libcurl/c/libcurl-tutorial.html 0 为使用的 curl url 添加确定的协议头 原文: If you specify URL without protocol:// prefix, curl will attempt to guess what protocol you might want. It will then default to HTTP but try other protocols based on often-used host name prefixes. For example, for host names starting with “ftp.” curl will assume you want to speak FTP. 1 把 curl_easy_perform() 回调数据直接写到文件中(FILE *) 原文: libcurl offers its own default internal callback that will take care of the data if you don’t set the callback with CURLOPT_WRITEFUNCTION. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing……
阅读全文
2014年9月7日对于 picocom, kermit, minicom, picocom 最简单易用,也完全符合我的使用需求。 安装 (mint / ubuntu): sudo apt-get install picocom 使用: picocom -b 115200 /dev/ttyUSB0 (/dev/ttyUSB0 为串口设备文件,如果用的不是USB转串口,则为 /dev/ttyS*) (可以设置一个别名,如 alias pc='picocom -b 115200 /dev/ttyUSB0',这样在终端输入 sudo pc 就可以打开终端了) 退出: Ctrl-a 是转义键,按 Ctrl-a Ctrl-q 就可以退出终端。 效果: 对比 picocom 优点:简单……
阅读全文