
C基础
IT8343
这个作者很懒,什么都没留下…
展开
-
C语言给串口发送数据
#include"haeundae.h"static int convbaud(unsigned long int baudrate){ switch (baudrate) { case 2400: return B2400; case 4800: return B4800; case 9600: ...原创 2019-11-20 11:08:48 · 4403 阅读 · 1 评论 -
Linux TCP服务器和客户端函数
my_socket.c:#include "my_socket.h"int create_tcp_client(const int server_port, const char* server_ip){ int sock_fd = -1; int ret; struct sockaddr_in sad...原创 2019-11-19 20:40:25 · 418 阅读 · 0 评论 -
替换字符串内容函数
int strrpc(char *str, char *oldstr, char *newstr, int len){ char *bstr = (char *)malloc(len); //转换缓冲区 memset(bstr, 0, len); int i = 0; for (i = 0; i < strlen(str); i++) { ...原创 2019-10-22 10:13:30 · 376 阅读 · 0 评论 -
C语言可变参数——传递给子函数
编写一个类似于sprintf的函数,与sprintf不同的是,参数多了一个等级参数,为unsigned char 型。代码如下:#include <stdio.h>#include<stdarg.h>int my_sprintf(const unsigned char level,const char *format,...){ char my_dat...原创 2019-10-21 09:56:47 · 6451 阅读 · 0 评论 -
进程间通信——消息队列范例
消息队列和共享内存相似,可以用于进程间通信。1.c#include "../common.h"#define MSG_FILE "./1.c"struct my_msg{ long int mtype; //必须为长整型 char mbuf[80];};int main(){ int msqid = -1; key_t key = -1; struct my...原创 2019-10-15 11:27:06 · 210 阅读 · 0 评论 -
C语言配置文件读取以及修改
#include "paramRead.h"#include "common.h"/* 读取字符类型的值 */int GetIniKeyString(char *dst, const char *title, const char *key, const char *filename){ FILE * fp = NULL; int f...原创 2019-10-14 17:05:11 · 1953 阅读 · 2 评论 -
多buff相同数据分组处理
假定有四个存储数据的buff,我们要提取每个buff的数据并进行处理。处理条件,4个buff之间相同的数据需要进行同步处理,且每个数据都需要进行处理。处理前先把相同的数据拷贝到一维数组中(4个长度),设定当值为-200的时候是不需要进行处理即该位置对应的buff没有这个数。 方法:创建4个链表用来存储每个buff的rssi。再按照1-2-3-4的提取顺序,提取完每个buff的r...原创 2019-02-18 20:34:02 · 237 阅读 · 0 评论 -
共享内存2.0(shmget,shmat函数)
#include"common.h"int main(){ int id; int key=getpid(); id=shmget(key,100,0666|IPC_CREAT);//创建共享内存,注意读写权限 printf("id = %d\n",id); sleep(10); char buf[30]; char *p=shmat(id,NULL,0);//获取共享内存起...原创 2018-12-21 12:00:06 · 245 阅读 · 0 评论 -
共享内存1.0(mmap函数)
#include"common.h"int main(){ int i,zero=1; int *ptr=&zero; if(fork()==0) { for(i=0;i<100;i++) { printf("child: %d\n",(*ptr)++); } exit(0); } for(i=0;i&...原创 2018-12-20 20:48:39 · 231 阅读 · 0 评论 -
makefile
URD360 = adapter net_recv handle drone drone_write net_recv_wyc handle_wyc objects = $(URD360)all:$(objects) gcc driver/driver.c driver/driver_menu.c -o driver.elf gcc driver/monitor.c -pthread...原创 2018-10-11 09:15:00 · 154 阅读 · 0 评论 -
UDP 广播与组播
代码1:服务器端#include "common.h"int main(){ int fd; struct sockaddr_in caddr; char recvbuf[1024]; char sendbuf[1024]; int set = 1; int i=0; int addrLen = sizeof(caddr); //接收数据 if((fd = socket...原创 2018-09-14 16:47:20 · 488 阅读 · 0 评论 -
自定义长度
#pragma pack(1)struct textdata{ long send_rate:40; long send_null:8; long send_energy:16; long temp_B:8; long temp_A:8; long temp_son:8; long temp_null:40; long tude_long:40; long tude_in...原创 2018-09-13 17:13:25 · 263 阅读 · 0 评论 -
通过设置套接字阻塞与非阻塞使UDP 接收到的数据始终为最新的数据
代码:#include"common.h"int fd;int abc = 1000;struct sockaddr_in caddr;int addr_len;static void setnonblocking(int sockfd) { //设置阻塞 int flag = fcntl(sockfd, F_GETFL, 0); if (flag...原创 2019-01-18 17:38:21 · 875 阅读 · 0 评论 -
共享内存 3.0 进程锁 与 进程锁
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <wait.h>#include <fcntl.h>#include <str...原创 2019-01-16 17:48:20 · 425 阅读 · 0 评论 -
UDP 双层select实现多端口输入,至少有一个端口有数据来时再做处理
接收:int main(){ int fd[4]={0,0,0,0},max_fd = 0; int i; int ret; int addr_len; struct sockaddr_in saddr,caddr; char buf[4][1024]; for(i=0;i<4;i++) { fd[i]=socket(AF_INET,SOCK_DGRAM,...原创 2019-02-18 13:41:21 · 744 阅读 · 0 评论 -
数据解析与位运算
#include"common.h"int main(){ int num = 0; int fd = -1; int ret = -1; char buf[1024]; unsigned char gps_buf[512]; int count = 1; fd = open("./0.bin",O_RDONLY); if(fd < 0) { perror("o...原创 2019-03-03 20:53:06 · 359 阅读 · 0 评论 -
C语言状态机
#include <stdio.h>#include<stdlib.h>int main(){ int num = 0; int i = 0; int state = -1; srand((unsigned)time(NULL)); while(1) { if(i>50)return 0; sleep(1); switch(s...原创 2019-04-20 16:17:23 · 1741 阅读 · 0 评论 -
结构体对齐(字节计算,包括位结构体)
结构体对齐规则:(1)每个成员分别按自己的对齐字节数和指定对齐字节数(Linux 64位默认为8)小的那个对齐,这样可以最小化长度。如在32bit的机器上,int的大小为4,因此int存储的位置都是4的整数倍的位置开始存储。(2)复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,结构体数组的时候,可以最小化长度。(3)结构体对齐后的长度必须是成员中最大的对...原创 2019-08-16 17:41:27 · 444 阅读 · 0 评论 -
用指向函数的指针作函数参数
本程序定义了一个process的函数,其参数有三个,两个整型参数,一个函数指针参数。函数指针是一种指向函数的指针,可以用来调用相关的函数。当函数指针不是作为参数的时候,必须要进行初始化给他赋值,例如int (*p)(int,int); *p=max或者p=max都是可以的,调用函数时直接写(*p)(a,b)或p(a,b)。 1 #include <stdio.h> 2 int ...原创 2018-05-04 19:51:58 · 1628 阅读 · 0 评论 -
获取时区详解以及fprintf
time_t time_utc=0; struct tm*p_tm_time; int time_zone=0;/*时区获取*/ p_tm_time=localtime(&time_utc); time_zone=(p_tm_time->tm_hour>12)?(p_tm_time->tm_hour-=24):p_tm_time->tm_hour; i...原创 2018-09-12 09:19:18 · 320 阅读 · 0 评论 -
封包发送数据包
服务器:#include"common.h"struct cli_t{ int num; int cfd; struct sockaddr_in caddr; struct cli_t *before; struct cli_t *next;}cli_t;struct cli_t *head = NULL;fd_set set;void *hander(){ st...原创 2018-09-04 16:13:05 · 2169 阅读 · 0 评论 -
指针++
1 #include<stdio.h> 2 int main() 3 { 4 char *a="abcdefg"; 5 char *p; 6 p=a; 7 printf("p1=%s\t",p); 8 printf("*p=%c\n",*p); 9 *p++; 10 printf("p2=%s...原创 2018-05-06 16:25:54 · 464 阅读 · 0 评论 -
输出正序反序所连接成的新字符串
1 #include<stdio.h> 2 void fun(char*s,char*t); 3 int main() 4 { 5 char*a="abcdefghijklmnopqrstuvwxyz"; 6 char*b; 7 fun(a,b); 8 } 9 10 void fun(char*s,char*t) 11 {...原创 2018-05-06 16:18:07 · 2824 阅读 · 0 评论 -
简析指针
指针是用来存放地址的,某类型的变量必须存放到该类型的指针之中。如整型的一个变量a,我们需要定义一个整型的指针去存放它的地址(int *p=&a)。记住,当我们定义了一个指针以后,一定要初始化并且赋给该指针一个值(即地址),否则,容易形成野指针,导致程序出现错误。定义指针变量时,在变量前加“*”,让系统知道你定义的是一个指针。一般我们采用(int *p)这样的方式进行定义,当然也可以(in...原创 2018-04-27 23:40:28 · 170 阅读 · 0 评论 -
爱因斯坦的题目:在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶.....................
在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶;如果每步跨5阶,那么最后剩4阶;如果每步跨6阶,最后剩5阶;只有当每步跨7阶时,最后才正好走完,一阶也不剩。请问这条阶梯至少有多少阶?(求所有三位阶梯数)。 1 #include<stdio.h> 2 int main() 3 { 4 int t,s=0; 5 //三位数...原创 2018-04-27 12:27:40 · 14342 阅读 · 0 评论 -
排序法
输入10个数,从小到大排序: 选择排序法:首先,用第一个数和其它9个数比较,把最小的放在第一位,然后把第二个数和其它8个数比较,以此类推... 1 #include<stdio.h> 2 int main() 3 { 4 int a[10],i,j,t; 5 printf("请输入10个数:\n"); 6 for(i=0;i<1...原创 2018-05-03 21:39:02 · 162 阅读 · 0 评论 -
C语言中递归详解
编写一个简单的cheng函数,输入的b全为数值5。第一种情况: 1 #include<stdio.h> 2 int cheng(int a) 3 { 4 5 if(a>1) 6 { 7 a=a*cheng(a-1); 8 printf("%d\n",a); 9 } 10 ret...原创 2018-05-03 15:54:31 · 21223 阅读 · 14 评论 -
从键盘输入字符串a,b,输出由a,b字符串中字符从大到小排列的新字符串
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char a[30],b[15],c; 6 int i,j; 7 printf("请输入字符串a:\n"); 8 gets(a); 9 printf("请输入字符串b:\n");...原创 2018-05-02 23:13:29 · 2221 阅读 · 0 评论 -
指针数组示例
设有一个数列,包含10个数,已按升序排好。现要求编写程序,把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。试编程。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列2,4,6,16,14,12,10,8,18,20) 1 #include<stdio.h> 2 i...原创 2018-05-02 10:12:52 · 1791 阅读 · 0 评论 -
简析指针2.0
指针数组,即指针所组成的数组,其本质也是指针。数组和指针由于其本质上都是地址,所以在输入时,不用加&,但是在输出时,需要加*。 1 #include<stdio.h> 2 int main() 3 { 4 int a[3][4]; 5 int *p[3]; //占24个字节 6 i...原创 2018-04-28 13:00:56 · 236 阅读 · 0 评论 -
指针---内存
#include<stdio.h>#include"common.h"int main(){ int a=10,b=20; int *p2,*p3; char *p1=(char*)malloc(8); p2=(int*)p1; *p2=b; printf("%d\n",*p1); //*p1随*p2改变} ...原创 2018-08-17 12:05:49 · 182 阅读 · 0 评论 -
字符串分割
int main(){ char buf[1024]="aa;bb;cc;dd;ee;ff"; char *p=buf; const char *d=";"; char *a; a=strsep(&p,d); while(a) { printf("%s\n",a); ...原创 2018-08-15 14:37:49 · 249 阅读 · 0 评论 -
vim输出字体设置
代码如下:#include<stdio.h>int main(){ int user,password; printf("请输入帐号\n"); scanf("%d",&user);getchar(); printf("请输入密码:\033[08m\n");//隐藏字体 scanf("%d",&password);getchar原创 2018-06-25 23:38:30 · 561 阅读 · 0 评论 -
随机数以及希尔排序
希尔排序:简单地说,希尔排序就是进行多次的插入排序,次数由增量决定(又称缩小增量排序,最后增量减小到1)。适合元素多的情况。一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定的。随机数:要产生[m,n]范围内的随机数num,可用:int num=ran...原创 2018-06-24 21:46:30 · 836 阅读 · 0 评论 -
直接插入排序(由小到大)
直接插入排序:把数组分为两个部分,前部分为已经排好序(a(0)——a(i-1)),后部分(a(i)——a(n)),循环把后部分元素(从a(i)开始)插入到前部分正确的位置。#include<stdio.h>void insort(int a[10]){ int k=10; int i;int temp; for(i=1;i<k;i++)// 从第二个...原创 2018-06-24 18:31:49 · 1614 阅读 · 2 评论 -
快速排序算法
快速排序:找一个基准数(一般为第一个数),比它大的放在他左边,比它小的放在它右边,最后使它到它该到的位置,然后利用递归的方式使每个数都到它应该在的位置。#include<stdio.h>void qsort(int b[],int left,int right){ int key; if(left<right) { int i=left...原创 2018-06-24 16:40:35 · 172 阅读 · 0 评论 -
如何使用fopen、fwrite、fread函数
fopen(const char * path,const char * mode); -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" -- mode: 文件打开方式,例如: "r" 以只读方式打开文件,该文件必须存在。 "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内...原创 2018-05-08 17:56:31 · 559 阅读 · 0 评论 -
fpuc、fgtec、fgets和fpus函数
fputc(ch,fp),函数功能: 将字符ch写到文件指针fp所指向的文件的当前指针的位置。fputs(str, fp)具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。(1)把str中零结束符之前的全部文字输入到文件中。(2)输入完成后,不会增加额外的特殊字...原创 2018-05-08 20:40:18 · 1457 阅读 · 0 评论