自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嵌入式

嵌入式爱好者!

  • 博客(102)
  • 资源 (7)
  • 收藏
  • 关注

原创 C实现输入输出重定向

/* 实现"+"为输入重定向,"-"为输出重定向 */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define BUFF (1024)int my_copy(int f

2020-08-31 16:45:34 577

原创 文件描述符与文件指针之间的转换

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define BUFF (1024)int fd2file(const char * path){ FILE *fp =

2020-08-31 09:48:24 263

原创 C中字符类型数据测试

#include <stdio.h>int main(){ char ch = 'F'; ch = getchar(); int i,j; for(i = 0; i <= ch - 'A'; i ++) { for(j = 0; j < i ; j ++) putchar('_');#if 1 for(j = 0; j <= i; j ++) putchar(ch - j);#endif putchar(10); } retu

2020-08-27 13:50:25 136

原创 Linux下C中打印文件的属性信息

#include <stdio.h>#include <unistd.h>#include <time.h>#include <sys/types.h>#include <sys/stat.h>int main(int argc, char *argv[]){ struct stat buf; int n; struct tm *tp; if(argc < 2) { printf

2020-08-27 13:49:45 351

原创 exit与_exit函数的比较

_exit()执行后会立即返回,而exit()要先执行一些清除操作,比如刷新缓冲区,然后将控制权交给内核。调用_exit()函数时,会关闭进程所有的文件描述符,清理内存,以及其他一些内核清理函数,但不会刷新流(stdin 、stdout、stderr……)。exit()函数是在_exit()函数上的一个封装,它会调用_exit,并在调用之前先刷新流。exit()函数与_exit()函数最大的区别就在于,exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。代码测试#

2020-08-27 13:49:29 352

原创 C指针与指针之间的相减操作

指针与指针的相减操作,表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数)。例如对于int类型的指针p和p1,p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。测试代码#include <stdio.h>int main(int argc,const char * argv[]){ int a[3] = {1,2,3}; int *p = a; printf("---------------

2020-08-27 13:49:15 5490

原创 Linux下C实现打印指定的目录下所有文件名称

#include <stdio.h>#include <dirent.h>int main(int argc, char *argv[]) {{ DIR *dirp; struct dirent *dp; if (argc < 2) { printf(“Usage : %s <directory>\n”, argv[0]); return -1; } if ((dirp = opend

2020-08-26 14:01:40 970

原创 文件IO中的目录操作

opendir函数#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name);功能:打开一个目录,获取目录流指针参数: name:目录名返回值: DIR是用来描述一个打开的目录文件的结构体类型,成功时返回目录流指针;出错时返回NULL。readdir函数#include <dirent.h>struct dirent *readdir(DIR *dirp);功能

2020-08-26 13:59:45 222

原创 文件IO基础总结

特点1、posix(可移植操作系统接口)定义的一组函数2、不提供缓冲机制,每次读写操作都引起系统调用3、核心概念是文件描述符4、访问各种类型文件5、Linux下, 标准IO基于文件IO实现一、open函数int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);功能:打开一个文件,获得文件的文件描述符参数: pathname:指定打开的文件路

2020-08-26 13:49:19 203

原创 Linux下C中使用write函数实现将键盘输入的内容写入文件,直到输入quit退出程序

#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#define N 128int main(int argc, const char *argv[]){ int fd; char buf[N] = { 0 }; memset(buf, 0, sizeof(buf)); if ((fd = open

2020-08-26 13:45:49 2086

原创 Linux下使用C中read函数实现统计文件大小

#include <stdio.h>#include <fcntl.h>#include <unistd.h>#define N 128int main(int argc, const char *argv[]){ int fd = -1; int n = 0; int total = 0; char buf[N]; if(argc < 2) { printf("

2020-08-26 13:38:27 564

原创 fprintf sprintf函数使用示例

//fprintf sprintf函数使用示例//以指定格式 “年-月-日” 分别写入文件和缓冲区#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){ int year = 2020; int month = 8; int day =26; FILE *fp; char buf[64]; if((fp = fopen("test

2020-08-26 10:56:44 281

原创 标准IO函数获取文件的大小

#include <stdio.h>int main(int argc, char *argv[]){ FILE *fp; long length = 0; if((fp = fopen("test.txt", "r")) == NULL) { perror("fopen"); return -1; } fseek(fp, 0, SEEK_END); length = ftell(fp); printf("

2020-08-26 10:47:02 861

原创 Linux下C实现统计文本文件含有多少行

#include <stdio.h>#include <string.h>#define N 64int main(int argc, char *argv[]){ FILE *fp; int line = 0; char buf[N]; if(argc < 2) { printf("Usage: %s <file>\n", argv[0]); return -1; } if(

2020-08-26 10:29:18 291

原创 strerror函数使用

通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述。#include <stdio.h>#include <string.h>#include <errno.h>int main(int argc, char *argv[]){ FILE *fp; if ((fp = fopen("test.txt", "r")) == NULL) { printf("errno=%d\n",errno);

2020-08-26 10:03:57 1011

原创 freopen函数使用

freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。FILE *freopen( const char *filename, const char *mode, FILE *stream );功能:以指定模式重新指定到另一个文件。模式用于指定新文件的访问方式。形参:filename:需要重定向到的文件名或文件路径。mode:文件访问权限。stream:需要被重定向的

2020-08-26 09:58:29 1370

原创 字符编码方式对ELF显示的影响

Linux默认使用的是UTF-8格式文件,所以有时候将Linux下编辑保存后的文件在Windows下查看会发现有乱码。在一些对编码格式有要求的场合,一定要注意使用正确的编码方式,比如字符叠加等场合,这个坑我是真的踩过的。使用UTF-8格式编码的源码文件,默认保存为UTF-8格式使用gcc编译,默认保存的格式为UTF-8。#include <stdio.h>int main(int argc, const char *argv[]){ int i = 0; unsigned c

2020-08-25 08:51:58 443

原创 C实现测试距今年的闰年数目

#include <stdio.h>int main(int argc, const char* argv[]){ int i = 0; int year = 0; int count = 0; for(year = 1; year <= 2020; year ++) { if(((!(year % 4)) && (year % 100)) || (!(year % 400))) { printf("%6d", year)

2020-08-21 14:56:06 106

原创 使用线程的互斥锁实现生产者消费者模型

#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <unistd.h>#include <sys/syscall.h>#define PTHREAD_NUM 2typedef void *(*pthread_func_t)(void *);

2020-08-20 13:38:59 198

原创 使用互斥锁实现字符串的逆置

#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/syscall.h>#include <unistd.h>typedef void *(*pthread_func_t) (void *);pthread_mutex_t mutex;char buf[] = "hello world";

2020-08-20 13:17:15 211

原创 互斥锁与条件变量实现按照顺序打印ABC

#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <semaphore.h>#define PTHREAD_NUM 3void *print_a(void *);void *print_b(void *);void *print_c(void *);typedef void *(*pthread_func_t)(void *);struct abc_de

2020-08-20 12:06:09 328

原创 使用三个线程下的信号量实现顺序打印ABC

#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <semaphore.h>#define PTHREAD_NUM 3void * print_a(void *);void * print_b(void *);void * print_c(void *);typedef void *(*pthread_func_t)(void *);typedef st

2020-08-20 10:53:29 463

原创 父子进程各拷贝一半文件实现

#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <unistd.h>#define N 128char buf[N] = { 0 };int main(int argc, char const *argv[]){ pid_t pid; int r

2020-08-20 09:47:47 692

原创 面试题目

1.static 有什么用途?(请至少说明两种)2.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?3.写出 float x 与“零值”比较的 if 语句。4. Windows 32 位系统下, C++程序,请计算 sizeof 的值char str[] = “http://www.uv-teck.com/”char *p = str ;int n = 10;请计算sizeof (str ) = ?sizeof ( p ) = ?sizeof ( n ) = ?void *p

2020-08-20 09:11:03 132

原创 Shell处理文件

待处理的文件(忽略第一行)日期 开盘 收盘 涨跌 涨跌幅20080102 5,265.00 5,272.81 11.25 0.210%20080103 5,269.80 5,319.86 47.05 0.892%20080104 5,328.41 5,361.57 41.71 0.784%20080107 5,357.45 5,393.34 31.77 0.5

2020-08-20 08:42:38 121

原创 C语言优先级

2020-08-20 08:42:15 181

原创 Linux网络编程

========================== 基础知识 =============授课过程中名词的规范:计算机处理的数据: 数据包物理网卡处理的数据: 数据帧IP地址:网间通信协议地址,用来在网络通信中唯一标识一台主机。IP地址目前有两类, IPv4、IPv6,目前主流是IPv4,未来的趋势是IPv6。IPV4地址是32bit的整数,IPv6地址是128bit的整数。IP地址的表示:二进制整数: 11000000 10101000 00000001 00000001点分十进制:

2020-08-20 08:42:01 218

原创 IO超级总结

文件:一组数据的集合。文件名:集合的名称。Linux系统下的7种文件类型:b block 块设备文件c character 字符设备文件d directory 目录文件- 普通文件l link 链接文件s socket 套接字文件p pipe 管道文件IO: 输入/输出。输入: 数据由外部流向进程内部。例如读键盘、读磁盘、接受网络数据等。输出: 数据由进程内部流向外部。例如向屏幕打印、写入磁盘、发送网络数据等。标准IO: 是由C标准库提供的函数接口, 有缓存,是高级I

2020-08-19 22:03:55 155

原创 C语言高级

gcc的编译过程1.预处理: 展开头文件、宏替换等,处理一切预处理指令(凡是以#号开头的语句) 头文件的作用:声明了函数原型(以便于编译器检测传参)、声明了外部全局变量、定义了数据结构和宏等。2.编译: 进行语法、语义、词法分析,最终把C语言程序编译成汇编语言程序。3.汇编: 进行语法、语义、词法分析,最终把汇编语言程序汇编成机器码。4.链接: 将程序的段内偏移地址重定位为线性地址,根据符号表链接静态运行库或目标文件。二进制代码工具objdump: 反汇编、查看二进制代码

2020-08-19 21:59:33 305

原创 C超级总结

=========== C语言源文件的组成 ===================预处理指令:凡是以‘#’开头的行,都属于预处理指令。include define ifndef endif 等例如:#include <stdio.h>#define N 10定义语句:结构体类型定义、别名定义、全局变量定义等。例如:struct student { int id; int score;};typedef int int32;int value = 10;声明

2020-08-19 21:56:41 357

原创 Linux下C内存对齐规则

内存对齐规则内存对齐有三种单位: 字、半字、字节。宽度为4B的数据要存放在能够被4整除的地址上。 (例如32位系统中的int、long)宽度为2B的数据要存放在能够被2整除的地址上。 (例如32位系统中的short)宽度为1B的数据要存放在能够被1整除的地址上(任意存放)。 (例如char)结构体的整体大小是其中最大基本类型的整数倍(如果基本类型的大小超过了系统的字长,则按系统字长计算。例如double)。GCC提供了一些机制允许用户自己控制内存对齐方式:一、使用编译注解机制 pra

2020-08-19 21:49:21 582

原创 Linux下软件管理

离线安装安装: sudo dpkg -i 安装包文件名卸载: sudo dpkg -r 软件包名查看软件状态: dpkg -s 软件包名查看软件安装路径: dpkg -L 软件包名查看软件包内容: dpkg -c 安装包文件名APT高级软件包管理工具集1.安装: sudo apt-get install 软件包名2.卸载: sudo apt-get remove 软件包名3.查看软件基本信息: apt-cache show 软件包名4.更新本地软件包索引表:

2020-08-19 16:21:10 117

原创 静态库与动态库的比较

1、静态库在编译的时候被加载,动态库在执行的时候被加载。2、加载静态库编译所生成的可执行文件比使用动态库的方式要大。3、静态库以.a为后缀,动态库以.so为后缀。静态库的制作:1.通过gcc -c add.c 生成目标文件 =》add.o2.通过ar crs -o libadd.a add.o 生成静态库 =》libadd.a3.通过gcc main.c -L. -ladd 链接静态库编译,生成可执行文件a.out4.执行a.out即可动态库的制作:1.通过gcc -c add.c 生成

2020-08-19 14:24:19 557

原创 Linux下进程间通信

同一个进程中的线程间由于共享内存地址空间,因此可以使用全局变量或者开放地址的堆空间直接通信, 不需要额外的开销。但是进程间由于各自空间地址独立,导致不可能直接通信,因此需要使用额外的开销——进程间通信机制。LINUX 进程间通信方式:UNIX: /* 传统, 绝大多数类UNIX系统都支持 */ 有名管道:mkfifo write read close 无名管道:pipe write read close 信号: signal kill raise pause alarm POSIX:

2020-08-19 13:40:00 167

原创 Linux下线程相关概念

UNIX/Linux的标准分类:BSDSystem VPOSIXpthread是遵循POSIX标准的thread。线程是轻量级的进程。进程是任务资源分配的基本单元。线程是任务时间调度的基本单元。回调函数创建线程int pthread_create(pthread_t *tid, pthread_attr_t *attru, void*(*callback)(void *), void *arg);功能: 创建一个线程,并让新的线程去实行callback函数。返回值: 成功, 0;

2020-08-19 13:36:31 111

原创 Linux下进程相关函数接口

创建进程pid_t fork(void);功能: 创建一个子进程。参数: 无。返回值: 成功:在父进程空间返回子进程的PID,在子进程空间返回0; 失败: -1,没有子进程被创建。结束进程void exit(int status);功能: 结束当前进程。返回值:无,一旦调用永不返回。参数: int status, 用户期望带回的状态值,一般表示任务是否成功。void _exit(int status) 同exit, 区别是_exit函数立即结束进程,不清理缓存。获取进程状态

2020-08-19 13:30:29 269

原创 Linux下进程基础

程序:由数据和指令组成,是静态的,一般存在于磁盘中,当装载进内存后可被执行。进程:是正在执行的程序,是动态的,在计算机内存中,包括程序的指令、数据以及程序运行需要的栈、堆、打开的文件等一切资源。进程的状态:运行态、可中断睡眠态、不可中断睡眠态、停止态、僵尸态、死亡态。进程的数据空间:常量区、静态区、堆区、栈区。Linux采用虚拟内存机制来管理系统内存,每个进程的地址空间都是虚拟的,通过内存映射表对应物理内存。段错误是操作系统的一种保护机制,当进程遇到了不可恢复的访存错误时,内核发出信号将该

2020-08-19 13:25:40 94

原创 文件IO接口函数

open( )#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);功能:创建或者打开文件,得到文件描述符参数:pathname:文件名flags:文件的访问权限O_RDONLY 只读O_W

2020-08-18 08:57:13 293

原创 进程基础1

进程进程是一个独立的可调度的任务 进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡创建:程序在执行的时候,内核将程序代码载入到虚拟地址空间(4G,映射物理内存,0~3G属于用户空间,3~4G内核空间),为程序数据变量分配空间,建立记账数据结构(task struct),保存进程的属性信息(PID,进程的状态)调度:进程管理单元,上下文切换消亡:内存的释放虚拟的地址空间:内存规划:将虚拟地址空间分割成大小为4K的页单元,同时将RAM分割成相同尺寸的页帧对于进程而言,虚拟地址空间中

2020-08-18 08:56:48 81

原创 int类型转换成字符串类型

#include <stdio.h>#define BUFF_SIZE 1024int int2string(int value, char *buff);int main(int argc, const char *argv[]){ int value = -98765432; char buff[BUFF_SIZE]; int2string(value, buff); puts(buff); return 0;}int int2string(int val

2020-08-18 08:56:37 1466

source_list.zip

树莓派镜像源文件,是清华的镜像源,实测可以使用,将文件覆盖到对应的位置即可。

2019-10-30

linux驱动书籍

该压缩包内为一本linux驱动书籍,一共23章,貌似和宋宝华的linux驱动书籍相似,可以参考下载!!

2019-04-11

宋宝华LINUX驱动书籍前言部分

宋宝华LINUX驱动书籍前言部分,为宋宝华linux驱动书籍的介绍,摘取的前言目录部分。

2019-04-08

ximnd操作基础

该文件为.xmind格式文件,介绍了xmind软件的基本使用技巧,和我的博客的内容一致,博客内容是从该文件导出成图片格式的。欢迎下载学习!!!!

2019-03-31

qt_c++源码

这是一个入门级别的QT测试代码,在别人的基础上做了简单的修改,供参考学习

2019-02-27

google插件

使用的是一些常用的google浏览器插件,还是比较全的插件!

2018-10-26

pyqt5第一章

最新版本的pyqt的第一章资料,内有如何搭建pyqt5环境的说明!

2018-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除