![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 85
haozigegie
浩子哥
展开
-
LinuxC实现FTP云盘
FTP云盘使用C语言进行编写,在ubuntu环境下运行,相关知识有Linux进程,Linux网络编程、Linux文件编程、结构体、字符串等等。返回值:如果字符串s1包含字符串s2,返回包含字符及后面字符,如果字符串s1不包含字符串s2则返回NULL。读入成功时,返回读取的字节数(如果读文件开始前光标到达文件尾端则返回0)读入失败时,返回-1。写入成功时,返回写入的字节数,写入数据为空返回0,写入失败返回-1。读入成功时,返回读取的字节数,读入失败时,返回-1。原创 2022-11-12 15:31:09 · 2150 阅读 · 1 评论 -
树莓派4B在驱动框架下操控I/O口
内核里的代码跟应用程序的代码访问的是虚拟地址,而不是物理地址,因此我们在驱动框架访问的I/O口应该是虚拟地址,要将树莓派I/O口的物理地址映射成虚拟地址。由芯片手册得知,GPFSELn (n= 0时控制引脚0~9,n=1时控制引脚10~19,以此类推)为功能选择寄存器,由芯片手册得知,GPFSETn (n= 0时控制引脚0~31,n=1时控制引脚32~57)为输出设置寄存器,输出设置。由芯片手册得知,GPCLRn (n= 0时控制引脚0~31,n=1时控制引脚32~57)为输出设置寄存器,输出设置。原创 2022-09-21 17:26:16 · 1387 阅读 · 0 评论 -
Linux内核编译
对于目的平台的Linux内核的编译,一般选择交叉编译的方式,以树莓派4B为例,在Linux虚拟机上编译一个适合树莓派4B使用的Linux内核。原创 2022-09-20 21:57:14 · 3738 阅读 · 0 评论 -
Linux交叉编译
交叉编译是在一个平台上生成另一个平台的可执行代码,例如我们在Windows编写的C51的代码,并编译生成在C51上可执行的xxx.hex文件,这个文件是在C51上运行的而不是在Windows运行的。由于我们使用的是交叉编译链编译目的平台的可执行文件,因此当我们需要链接第三方库时,该库应该也是目的平台的第三方库,否则该交叉编译链将不认识此库,怎么使用第三方库可以看往期博文。配置好环境变量后就能在任何目录底下使用交叉编译链来编译文件了。原创 2022-09-20 19:34:26 · 927 阅读 · 0 评论 -
Linux内核结构与字符设备驱动
当用户态(上层应用)调用open(“/dev/xxx”,O_RDWR,0666)时,会执行一条汇编指令(swi xxx),该指令会发生一次异常,类似于中断,中断号为0x80,0x80代表发生了一次系统调用,进入了内核态,然后内核态会调用syscall(),该函数会根据open()提供的设备名(文件名)找到主设备号从而在驱动链表找到相应的驱动(即找到结构体file_operations),然后vfs调用sys_open来调用驱动的kernel_open(),write(),read()同理,syscall()原创 2022-09-19 21:58:36 · 559 阅读 · 0 评论 -
Linux文件系统
文件系统称为文件管理系统(是一个程序),是操作系统用于明确存储设备组织文件的方法(即磁盘如何保存文件),文件系统常规认知为根目录。nux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux。存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问。存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜。如果你的系统上有 /var/run 目录,应该让它。存储的是当前内核运行状态的一系列特殊文件。存放所有的系统管理所需要的配置文件和子。存放着最经常使用的命令。原创 2022-09-18 21:35:36 · 324 阅读 · 0 评论 -
Linux第三方库的使用
Linux在使用很多额外的功能时都要用到第三方库,本文将使用curl库和sqlite库两个第三方库。原创 2022-09-18 20:42:11 · 1565 阅读 · 0 评论 -
Linux分文件编程与Linux动态库
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行,就是将源代码转变成二进制格式的源代码,这就是相当于是对这部分的代码进行了加密,别人可以使用这个库,但是看不见库里面的内容,不需要提供.c的分文件。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级Linux中的静态库。我们将加减乘除的功能进行划分成四个.c文件,让主程序更加简洁。在目标程序执行前(编译的时候)就加入到目标程序中去了。是在目标程序执行时动态(临时)由目标程序去调用。主函数:my_main.c。原创 2022-09-17 21:49:25 · 572 阅读 · 0 评论 -
TCP/IP的三次握手、四次挥手
在连接时当服务器收到客户端的SYN包连接请求后,服务器可以直接发送SYN+ACK包,ACK包用来应答,SYN包用来同步,断开连接时,服务器收到客户端的FIN包后,可能不会马上关闭服务器,只能发个ACK包用来应答,只有当服务器的数据处理完毕,服务器才会发送FIN+ACK包关闭服务器。TCP连接是全双工的,即需要client和server两端发送消息的两个方向都要连接成功,那么为了保证两端都连接成功,至少需要三次通信来建立连接,次数增多了也是在浪费资源,所以需要三次握手。原创 2022-09-17 16:56:14 · 540 阅读 · 0 评论 -
Linux网络编程
跟文件编程中的write()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的write()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的read()没什么区别,使用accept()返回的套接字描述符。跟文件编程中的read()没什么区别,使用accept()返回的套接字描述符。调用成功返回套接字描述符,返回的套接字描述符用于传输数据,调用失败返回-1。调用成功返回套接字描述符,调用失败返回-1。调用成功返回套接字描述符,调用失败返回-1。原创 2022-09-15 20:45:54 · 1164 阅读 · 0 评论 -
Linux时间
成功tm类型结构体地址,保存转换后的数据的结构体地址,失败返回NULL。返回一个char类型地址,保存该日历时间的字符串地址。1970-01-01 00:00:00到此刻的秒数。调用成调用成功返回0,调用失败返回-1。调用成调用成功返回0,调用失败返回-1。调用成功返回0,调用失败返回-1。每1s钟打印一次hello。原创 2022-09-14 20:26:19 · 281 阅读 · 0 评论 -
Linux线程
对于存放共享资源并用读写锁加锁的房子,第一个加锁的线程决定了这把读写锁的状态,若该读写锁处于读加锁状态,则其他线程能以读加锁的方式进入该房子,若该锁处于写加锁的状态,则其他线程无论以读加锁的方式还是写加锁的方式都无法进入该房子。因为当线程1已经使用互斥量a进行加锁,线程2已经使用互斥量b进行加锁,此时线程1想使用互斥量b进行加锁,而线程2想使用互斥量a进行加锁,此时两个线程都加不到想要加的锁,因此无法向前运行,就会陷入死锁状态。该定义成一个全局变量,让该进程内的所有线程都能访问。原创 2022-09-14 16:21:10 · 565 阅读 · 0 评论 -
Linux进程间通信
由于read()函数在读不到数据时会阻塞,因此我们在读数据的进程创建命名管道,并阻塞等待写数据的进程向命名管道写入数据 ,在创建命名管道时,给管道的权限建议是0600,即可读可写可执行。创建一块共享内存,writeShm进程每隔1秒向共享内存写入一个字母,readShm进程每隔一秒从共享内存读取一个字母,当从共享内存连续10s读不到数据后,会删除该共享内存。信号量保证子进程先运行,父进程后运行,同理子进程先获得临界资源,父进程后获得临界资源。当写数据进程启动后,读数据进程不再阻塞,开始读取命名管道的数据。原创 2022-09-13 16:37:06 · 2622 阅读 · 0 评论 -
Linux进程
程序:存储在磁盘上的某个可执行文件进程:程序被执行后称为进程命令ps -aux:查看系统中进程状态。原创 2022-09-07 20:00:12 · 719 阅读 · 0 评论 -
Linux文件编程
linux一切皆文件,上到程序,下到设备,因此文件编程是学习Linux一个重要的版块。文件描述符:当内核打开一个现有文件或创建一个新文件时,都会返回一个文件描述符,文文件描述符是一个小的非负整数原创 2022-09-06 20:36:24 · 584 阅读 · 0 评论 -
Linux网络编程,服务器与客户端相互聊天
一、服务端API介绍1.创建套接字socket()套接字:TCP用主机的IP地址加上主机的端口号作为TCP连接的端点int socket(int domain, int type, int protocol);返回一个网络描述符,类似于文件描述符,用于接下来的操作,失败返回-1参数:int domain:(一般使用AF_INET,互联网协议族)AF_UNIX: Unix域AF_INET: IPv4 因特网域AF_INET6: IPv6 因原创 2022-05-09 22:09:52 · 2333 阅读 · 0 评论 -
linux环境下使用C语言编写cp指令(copy函数)
在编写函数前介绍一下int main() 函数的原型:argc 是Linux使用gcc编译时传的参数个数,argv 是指向指针数组(数组元素都为指针)的指针,类似于二级指针,如下图,我们一般使用第一种的表示方法,这样更有利于告诉阅读代码的人,这是一个指向指针数组的指针,而不单纯是一个指针。cp指令的实现步骤:打开原文件读取原文件的内容打开目标文件将原文件的内容写入到目标文件中关闭原文件和目标文件1原创 2022-04-24 18:01:19 · 3078 阅读 · 1 评论 -
Linux对光标的操作与创建文件lseek、creat
lseek()函数:移动光标off_t lseek(int fd, off_t offset, int whence);使用lseek函数需要的头文件:#include <unistd.h>#include <sys/types.h>参数:int fd:使用open()时返回的文件描述符off_t offset:偏移字节:0为不偏移,-a为往前偏移a个字节,b为往前偏移b个字节int whence:光标位置:SEEK_SET 文件指针开原创 2022-04-26 08:00:00 · 329 阅读 · 0 评论 -
Linux中的open()、write()与read()函数,超详细
open()函数:int open(const char *pathname, int flags, mode_t mode);使用open函数需要的头文件:#include #include #include open()的返回值:返回一个文件描述符,当文件成功打开时,返回一个非负整数,当文件打开失败时,返回-1文件描述符将用于write(),read(),lseek()使用参数:const char *p原创 2022-04-25 08:00:00 · 13788 阅读 · 0 评论