
Linux
文章平均质量分 96
sakabu
记录我的嵌入式学习路线,梦想成为嵌入式大牛
展开
-
基于Linux C语言多线程服务器+Qt客户端+STM32客户端实现的无人超市项目
这个是前段时间做的一个项目,综合性很强,还是值得学习的。技术栈有Linux系统编程(线程编程、进程间通信、网络编程作为socket服务端)、MySQL数据库(服务端和数据库进行交互,存储和读取数据)、Qt上位机开发(作为socket客户端)、STM32使用8266WIFI模块也作为socket客户端。Linux网络编程Qt网络调试助手MySQL数据库开发。其中Qt我写了两个程序都作为socket的客户端(client),其中Qt管理员端主要负责商品和会员信息的注册和数据的修改工作。原创 2025-03-30 18:37:55 · 1157 阅读 · 7 评论 -
Linux安装MySQL数据库并使用C语言进行数据库开发
由于最近在做项目,需要用到数据库,想在Linux服务端使用C语言操作MySQL数据库,于是写一篇博客记录一下。希望大伙点个关注支持一下,不久后就更新项目博客。编译的时候需要指定头文件路径以及链接mysqlclient库。项目中只用到了数据的插入、修改、删除和查询(如果你也是想用C语言对数据库进行简单操作,你可以参考我的代码)。后面我会更新Linux下C语言编写的服务端+Qt管理员端+Qt用户端+STM32用户端实现的无人超市项目。希望大家点个关注支持一下。原创 2025-03-25 20:31:47 · 1240 阅读 · 0 评论 -
Linux网络编程
此函数用于创建一个套接字。domain是网络程序所在的主机采用的通讯协族(AF_UNIX 和 AF_INET 等)。◼ AF_UNIX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对 Internet 的,因而可以允许远程通信使用。type是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM 等)。◼ SOCK_STREAM 表明用的是 TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流。原创 2024-11-09 23:19:45 · 704 阅读 · 1 评论 -
Linux线程编程(创建&退出&等待&互斥锁&条件变量)
典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。所谓线程,就是操作系统所能调度的最小单位。普通的进程,只有一个线程在执行对应的逻辑。我们可以通过多线程编程,使一个进程可以去执行多个不同的任务。相比多进程编程而言,线程享有共享资源,即在进程中出现的全局变量, 每个线程都可以去访问它,与进程共享“4G”内存空间,使得系统资源消耗减少。原创 2024-07-28 18:19:02 · 674 阅读 · 0 评论 -
Linux进程间通信(共享内存&信号&信号量)
共享内存一般都结合信号量来使用,假设我们写了一个无限循环的程序,想要让它停止运行,我们会按Ctrl+C键来终止进程,其实就是向进程发送了第2个信号SIGINT,kill是发送信号的指令,-9表示发送第9个信号,也就是发送SIGKILL信号给对应ID的进程,信号的处理有三种方法,分别是:忽略、捕捉和默认动作,信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量无法实现进程间收发数据。原创 2024-07-23 09:39:30 · 990 阅读 · 0 评论 -
Linux进程间通信(管道,命名管道/FIFO,消息队列)
它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不 是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。创建管道后,数据不知道要怎么走,管道要怎么连接?所以我们要把路“打通”,告诉水要怎么流。由于管道是半双工的,所以两条路不能同时选,避免干扰,要把不用的路给断开。当传入一个数组名字时,sizeof返回整个数组在内存中占用的字节数,而不是数组中存储的实际数据的长度,而strlen会返回字符串"\0"之前的字符串的长度。按照定义的消息结构体接受处理消息原创 2024-07-21 02:25:04 · 1181 阅读 · 2 评论 -
Linux进程编程(exec族函数,system函数,popen函数)
一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec函数。在调用进程内部执行一个可执行文件。path:可执行文件的绝对路径arg:可执行程序所带的参数,第一个参数为可执行文件名字,没有带路径且arg必须以NULL结束。我们之前执行可执行文件都是用 ./+可执行文件名的方式,前面加上sh -c 则是另外一种方式,不过两者实现功能一样。原创 2024-07-16 08:41:11 · 1066 阅读 · 0 评论 -
Linux进程编程(vfork函数,进程退出,父进程等待子进程退出及其相关函数)
vfork函数也可以创建进程,它与fork函数有两个关键的区别在我的上一篇文章中讲到,子进程会拷贝父进程的代码,并且开辟一个新的存储空间,父子进程之间的变量互不干扰,而vfork与之相反。这里先用fork函数创建进程,运行结果为:我们来修改代码,将fork改成vfork,其运行结果为:可见子进程一直在执行,只有子进程退出后才轮到父进程执行。原创 2024-07-14 00:01:50 · 1019 阅读 · 0 评论 -
Linux进程编程(使用fork函数创建进程以及fork函数的实际引用场景)
每个进程都有一个非负整数表示的唯一ID,叫做pid,它就像进程的身份证一样。Linux操作系统中,默认pid=0的进程为交换进程(swapper),作用是进程的调度;默认pid=1的进程为init进程,作用是系统的初始化。编程调用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。 由fork创建的新进程被称为子进程(child process)。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。原创 2024-07-13 01:17:56 · 1110 阅读 · 0 评论 -
Linux文件编程(标准C库)
前面讲到的open函数都是基于linux内核的,也就是说在Windows系统上无法运行,移植性比较差,但标准C库同样有一套对文件进行操作的函数。原创 2024-07-11 22:18:20 · 1066 阅读 · 0 评论 -
Linux文件编程应用
我们学习了文件编程的常用指令以及了解文件编程的基本步骤后,试着来写一些程序实现某些功能。我们假设我们已经把程序写好了,那么在终端上我们会输入“./a.out demo4.c demo7.c”以实现和cp指令同样的操作,那么这个argc就是从第一个文件名开始数,一共有多少个文件,argc就是文件的个数;argv是一个二级指针,可以理解成指针里的每一项都是一个数组。1.文件光标位置,在进行读写操作之前,确认光标处于正确的位置。2.打开文件后必须关闭文件,避免造成数据损坏。原创 2024-07-11 02:36:14 · 714 阅读 · 0 评论 -
Linux文件编程(打开/创建&写入&读取&移动光标)
发现读到了0个字节,内容也是空的,这里就要提到文件光标了,我们写入了内容后,光标是在我们写入内容的后面,这时候去读文件,自然是从光标位置往后读,所以读到是空。原创 2024-07-09 20:52:18 · 1480 阅读 · 0 评论