Linux
文章平均质量分 50
你笑一笑嘛
这个作者很懒,什么都没留下…
展开
-
Makefile的编写规则
Makefile的好处:修改源文件或者头文件,只需要重新编译牵涉的文件,就可以重新生成APPMakefile文件编写规则目标(target)...:依赖(prerequiries)<tab>命令(command)目标通常是要生成的文件的名称,可以是可执行文件或OBJ文件,也是一个执行动作的名称,如“clean”。依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。命令是生成目标执行时的动作,一个规则可以含几个命令,每个命令占一行。注意:每个命令行前面必须是一个tab原创 2021-04-19 20:39:21 · 939 阅读 · 0 评论 -
软链接和硬链接的生成
软链接概念软链接文件有类似于Windows的快捷方式。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。你选定的位置上生成一个文件的镜像,不会占用磁盘空间ln -s libwiringPi.so.2.50 libwiringPi.so //指令 参数 要被链接的文件 软链接文件名字硬链接概念硬链接就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以原创 2021-03-07 22:34:34 · 187 阅读 · 0 评论 -
Linux之带wiringPi库的交叉编译
正常我们需要先交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的时候,链接库的格式也是正确的。如果我们直接编译,会出现报错/arm-linux-gnueabihf/bin/ld: cannot find -lwiringPicollect2: error: ld returned 1 exit status解决方法:把树莓派的wiringPi库拿上来用在CRT中登入树莓派,输入cd /usr/lib/就可以查看到wiringPi库里的东西。而libwiringPi.s原创 2021-03-07 22:26:11 · 456 阅读 · 0 评论 -
Linux之交叉编译
交叉编译:在一个平台上生成另一个平台的可执行代码。编译:是在一个平台上生成该平台的可执行程序为什么要交叉编译:有的平台上不允许或者不能够安装我们所需要的编译器比如C51。因为目的平台上的资源匮乏,无法运行我们所需要的编译器。树莓派是不是就不需要交叉编译?错。也要,树莓派有时又是因为目的平台还没建立,连操作系统都没有,根本谈不上什么编译器。操作系统也要代码,也要编译。平台运行至少需要两样东西:bootloader(启动引导代码)以及操作系统核心宿主机(host)(电脑) :编辑和编译程序的平台,原创 2021-03-07 22:10:20 · 892 阅读 · 0 评论 -
socket,tcp,http三个区别
http属于应用层,socket在会话层,tcp/ip在传输层tcp/ip协议是准确的点对点连接,其连接需要经过“三次握手”:第一次握手(连接请求SYN=1,ACK=0):客户端主动发起连接,会将SYN(syn=j)包发给服务器。第二次握手(请求确认SYN=1,ACK= 1):当服务器接收到客户端的连接请求时,会将SYN(syn=i)包和ACK包(syn=j+1)发给客户端。第三次握手(连接确认SYN=0,ACK=1):客户端接收到服务器的连接确认时,会将SYN(syn=i+1)包和ACK包(syn原创 2021-03-07 16:38:53 · 413 阅读 · 0 评论 -
静态库与动态库的制作
静态库:静态库函数是在执行程序前(编译)就加入到目标程序中去了。优点:运行快缺点:程序大动态库:动态库函数是在执行动态(临时)由目标程序去调用。缺点:运行慢优点:小静态库的制作静态库的制作:格式xxxx.agcc calcufuncs.c -c 生成xxx.o文件ar rcs libcalcufunc.a calcufuncs.o xxx.o文件生成xxx.a静态库文件静态库的使用: gcc calculatorT.c -lcalcufunc -L ./ -o mainProSt原创 2021-03-06 21:01:46 · 100 阅读 · 0 评论 -
libcurl等第三方库的通用编译方法
1.下载libcurl库安装包https://github.com/curl/curl/releases/tag/curl-7_71_12.拖进虚拟机中解压tar xvf curl-7.71.1.tar.gz 3.进入该目录cd curl-7.71.1/4.安装库4.1如果只在虚拟机中跑程序,则输入下列命令./configure --prefig=$PWD/_install4.2如果只在树莓派中跑程序,则输入下列命令./configure --prefig=$PWD/_ins原创 2021-03-05 12:14:26 · 1393 阅读 · 0 评论 -
open和close函数
open函数:打开或创建文件系统调用open可以用来打开普通文件、块设备文件、字符设备文件、链接文件和管道文件,但只能用来创建普通文件,创建特殊文件需要使用特定的函数。头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>函数原型:int open(const char *pathname,int flages);int open(const char *pathname,int原创 2020-10-25 12:08:30 · 2051 阅读 · 0 评论 -
无名管道
无名管道在文件系统中无文件名称在文件IO中创建一个文件或打开一个文件是由open函数来实现的,它不能创建管道文件。只能用pipe函数来创建无名管道。函数形式:int pipe(int fd[2])功能:创建无名管道参数:两个文件描述符。返回值:成功是0,出错是-1;注意:Ø 管道中的东西,读完了就删除了;队列Ø 如果管道中没有东西可读,则会读阻塞(进程睡眠)。pipe函数的使用例子:#include <unistd.h>#include <stdio.h>原创 2020-11-15 11:25:48 · 190 阅读 · 0 评论 -
有名管道
有名管道即文件系统中存在这个一样文件节点,每一个文件节点都有一个inode号。而且其是一个特殊的文件类型:p管道类型创建这个有名管道,不可以通过open 函数,open 函数只能创建普通文件,不能创建特殊文件。函数mkfifo()mkfifo 用来创建管道文件的节点,没有在内核中创建管道。只有通过open 函数打开这个文件时才会在内核空间创建管道。函数形式:int mkfifo(const char * filename,mode_t mode);功能:创建管道文件参数:管道文件文件名(要包原创 2020-11-15 11:41:38 · 263 阅读 · 0 评论 -
进程通信之信号通信
信号通信信号通信其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。信号在内核中已经存在,并且在内核中有很多信号。信号通信的框架l 信号的发送(发送信号进程):kill raise alarml 信号的接收(接收信号进程) : pause() sleep while(1)l 信号的处理(接收信号进程) : signal用命令kill -l 查看内核中有多少信号CLC@Embed_Learn:~$ kill -l 1) SIGHUP 2) SIGIN原创 2020-11-22 22:37:37 · 638 阅读 · 0 评论 -
Linux查看结构体所在的.h文件
1.当你知道库函数所在目录时:/usr/include$ grep "struct sockaddr_in {" * -nir// n表示行号,i表示不区分大小写,r是本目录回车后会出现:linux/in.h:184:struct sockaddr_in {// linux/in.h就是我们所需要的.h文件,184是在该.h文件中的行数。2.当你不晓得结构体在那个目录时:可直接在根目录中输入:grep "struct file_operations {" * -nir原创 2020-12-30 10:31:41 · 1046 阅读 · 0 评论