Linux C应用编程
文章平均质量分 83
此类文章作为 Linux 应用开发入门篇,主要为大家讲解 Linux 应用开发过程当中会用到的基础入门知识,譬
如 Linux 文件 IO 操作、高级 IO 操作、文件属性、系统信息获取与设置、进程、进程间通信、线程以及信号
等基础应用编程知识。
比特冬哥
Choice determines effort
技术交流wx:Lntt-xbc
展开
-
RFID智能物料仓库管理系统
GEC6818开发平台,核心板采用10层板工艺设计,确保稳定可靠,可以批量用于平板电脑,车机,学习机,POS机,游戏机,行业监控等多种领域。该平台搭载三星Cortex-A53系列高性能八核处理器S5P6818,最高主频高达1.4GHz,可应用于嵌入式Linux和Android等操作系统的驱动、应用开发。开发板留有丰富的外设,支持千兆以太网、板载LVDS接口、MIPI接口、USB接口等。原创 2023-06-27 06:00:00 · 2704 阅读 · 3 评论 -
基于GEC6818 Qt智能病房监控系统
GEC6818 开发平台,核心板采用 10 层板工艺设计,确保稳定可靠,可以批量用于平板电脑,车机,学 习机,POS 机,游戏机,行业监控等多种领域。该平台搭载三星 Cortex-A53 系列高性能八核处理器 S5P6818, 最高主频高达 1.4GHz,可应用于嵌入式 Linux 和 Android 等操作系统的驱动、应用开发。开发板留有丰富的外设,支持千兆以太网、板载 LVDS 接口、MIPI 接口、USB 接口等。在本次项目中主要实现数据通信及界面显示等功能。原创 2023-06-26 06:00:00 · 3105 阅读 · 1 评论 -
MQTT协议 详解
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。原创 2023-04-24 06:00:00 · 2257 阅读 · 0 评论 -
基于Linux_ARM板的驱动烧写及连接、挂载详细过程(附带驱动程序)
这里为似懂非懂的朋友简单叙述该文章的具体操作由来,我们的主要目的是将写好的驱动程序烧进开发板中,看到我们想要的现象。第一个,我们需要让开发板和Linux平台建立联系,这样我们才能让俩者进行更好的交互,这个中间件网上有许多,这里我以putty为例连接展示。第二个,在Linux上交叉编译好的可执行文件需要上传到中间件上运行,这里需要使用nfs服务挂载到开发板上。第三个,在该ARM板上,厂商已为客户写入部分内核驱动模块。原创 2023-03-01 18:52:25 · 2851 阅读 · 2 评论 -
嵌入式原理与应用期末复习汇总(附某高校期末真题试卷)
1、为保证在启动服务器时自动启动DHCP进程,应对( B )文件进行编辑。A、 /etc/rc.d/rc.inet2 B、/etc/rc.d/rc.inet1C、/etc/dhcpd.conf D、/etc/rc.d/rc.S2、文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是( A )。 A 、chmod a+x g+w exer1 B 、chmod 765 exer1 C 、chmod o+x exe原创 2023-02-17 16:00:00 · 7876 阅读 · 11 评论 -
Linux应用编程下连接本地数据库进行增删改查系列操作
本篇为C语言应用编程下连接Linux本地数据库进行增删改查系列操作。在此之前,首先当然是你需要具备一定的数据库基础,所以下面我先列出部分常用的SQL操作语句,其次再介绍一些必备的数据库操作函数以供大家参考学习。原创 2023-02-18 12:00:00 · 1544 阅读 · 0 评论 -
Linux下Socket编程利用多进程实现一台服务器与多台客户端并发通信
前些日子同“Linux应用编程”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的Socket编程,若还存在一些套接字相关函数模糊不清,读者可移步“Socket编程下tcp通信”和“Socket编程下udp通信”重温学习。本篇则是对以上俩篇的一个简单提升运用,或者说是对以后多线程/进程工作的简单示例。PF_INET 和 AF_INET 的区别:在Windows中,AF_INET与PF_INET完全一样,而在Unix/Linux系统中,在不同的版本中这两者有微小差别。原创 2023-02-16 20:42:35 · 1566 阅读 · 15 评论 -
嵌入式 C语言/C++ 常见笔试、面试题 难疑点汇总(经典100道)
#pragma comment。将一个注释记录放置到对象文件或可执行文件中。#pragma pack。用来改变编译器的字节对齐方式。#pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码段.text中#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。当类不包含任何成员的时候,大小本该是0,但是为了便于区分,大小是1.c是标准C程序文件名的后缀;.cpp则是C++程序文件名的后缀;.o原创 2022-11-29 18:45:44 · 5844 阅读 · 2 评论 -
进程通信(3) ----- 消息队列
消息队列就是消息的链表,一个消息队列允许一个或多个进程向它写消息或者读消息。实验前需要提前准备一台PC机,并在PC机上搭建Linux Ubuntu环境。2.掌握进程通信中的消息队列编程模型。1.打开Linux系统,新建一个终端。1.了解进程通信中的消息队列。1.创建和打开消息队列。2.向队列中写入消息。3.读取队列中的消息。原创 2022-11-29 08:00:00 · 779 阅读 · 0 评论 -
进程通信(2) ----- 信号
信号是通信量最小的一种进程间通信形式,也用于内核与进程间的通信,信号是软件中断,它传递异步信号。实验需提前准备一台PC机,并在PC机上搭建Linux Ubuntu环境。4.检测挂起的信号,设置信号处理程序。2.掌握进程通信间的信号编程模型。1.使用kill函数杀死另一进程。1.打开Linux系统,新建终端。1.了解进程通信间的信号机制。原创 2022-11-28 08:00:00 · 980 阅读 · 0 评论 -
进程通信(1) ----- 无名管道和有名管道
管道是一种进程间通信的方式,在linux中分为有名管道和无名管道。有名管道就是把一个进程的输出写到一个文件中,再把此文件作为另一个进程的输入,普通管道只能用于父子进程,而有名管道能用于不相关的进程间。本次实验的内容需要编写一个普通管道程序和命名管道程序,并测试。实验需要提前准备一台PC机,并在PC机上搭建Linux Ubuntu环境。1.了解操作系统中的无名管道和有名管道。1.打开Linux系统,新建一个终端。2.掌握进程通信中的管道编程模型。原创 2022-11-27 19:09:32 · 1401 阅读 · 0 评论 -
mkfifo函数 及 解决Linux下 “mkfifo: no such file or directory”
是一个建立实名管道的函数。mkfifo ()会依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限(mode%~umask),因此 umask值也会影响到FIFO文件的权限。Mkfifo ()建立的FIFO文件其他进程都可以用读写一般文件的方式存取。:成功,0;失败,-1指出想要创建的FIFO路径指定创建的FIFO访问模式。这个访问会与当前进程的umask进程运算,以产生实际应用的权限模式。: 路径所在的目录不允许执行权限。原创 2022-11-17 17:31:39 · 2018 阅读 · 3 评论 -
基于Socket编程下 实现Linux-Linux、Linux-Windows udp通信
在虚拟机下开启俩个终端,分别运行服务器和客户端程序(服务器运行在前,客户端运行在后)①客户端 Windows_Client。②服务器 Linux_Server。⑤接收客户端发送过来的数据。⑤接收客户端发送过来的数据。②Sockets初始化信息。若需程序源码可在评论区留言。⑤接收服务器发过来的消息。⑥接收服务器发过来的消息。③指定IP地址与端口号。③指定IP地址和端口号。③指定IP地址与端口号。④指定IP地址和端口号。原创 2022-11-11 10:00:00 · 1292 阅读 · 5 评论 -
TCP与UDP协议的解析 及 TCP与UDP的区别
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路原创 2022-11-10 16:17:59 · 303 阅读 · 0 评论 -
Socket 编程基础
套接字(socket)是 Linux 下的一种进程间通信机制(socket IPC),在前面的内容中已经给大家提到过,使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上的不同应用程序。socket IPC 通常使用客户端服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。内核向应用层提供了 socket 接口,对于应用程序开发人员来说,我们只需要调用 socket 接口开发自己的应用程序即可!原创 2022-11-04 08:00:00 · 32387 阅读 · 3 评论 -
基于Socket编程下 实现Linux-Linux、Linux-Windows tcp通信
Socket编程基础、TCP传输控制协议。①、调用 socket()函数打开套接字,得到套接字描述符;②、调用 bind()函数将套接字与 IP 地址、端口号进行绑定;③、调用 listen()函数让服务器进程进入监听状态;④、调用 accept()函数获取客户端的连接请求并建立连接;⑤、调用 read/recv、write/send 与客户端进行通信;⑥、调用 close()关闭套接字。原创 2022-11-05 08:00:00 · 1676 阅读 · 5 评论 -
TCP 传输控制协议( 三次握手,四次挥手...... )
传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。互联网络与单个网络有很大的不同,因为互联网络的不同部分可能有截然不同的拓扑结构、带宽、延迟、数据包大小和其他参数。TCP的设计目标是能够动态地适应互联网络的这些特性,而且具备面对各种故障时的健壮性。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。原创 2022-11-03 08:00:00 · 366 阅读 · 0 评论 -
getcwd()、chdir()和 fchdir()函数的基本使用
Linux 下的每一个进程都有自己的当前工作目录(current working directory),当前工作目录是该进程解析、搜索相对路径名的起点(不是以" / "斜杆开头的绝对路径)。譬如,代码中调用 open 函数打开文件时,传入的文件路径使用相对路径方式进行表示,那么该进程解析这个相对路径名时、会以进程的当前工作目录作为参考目录。一般情况下,运行一个进程时、其父进程的当前工作目录将被该进程所继承,成为该进程的当前工作目录。原创 2022-09-08 08:00:00 · 4571 阅读 · 0 评论 -
打开、读取以及关闭目录[ opendir()、 readdir()和 closedir() ]
打开、读取、关闭一个普通文件可以使用 open()、read()、close(),而对于目录来说,可以使用 opendir()、readdir()和 closedir()来打开、读取以及关闭目录。opendir()函数用于打开一个目录,并返回指向该目录的句柄,供后续操作使用。readdir()用于读取目录,获取目录下所有文件的名称以及对应 inode 号。closedir()函数用于关闭处于打开状态的目录,同时释放它所使用的资源。原创 2022-09-07 08:00:00 · 11392 阅读 · 1 评论 -
创建和删除目录( mkdir函数 和 rmdir函数 )
目录(文件夹)在 Linux 系统也是一种文件,是一种特殊文件,同样可以使用前面给大家介绍 open、read 等这些系统调用以及 C 库函数对其进行操作,但是目录作为一种特殊文件,并不适合使用前面介绍的文件 I/O 方式进行读写等操作。在 Linux 系统下,会有一些专门的系统调用或 C 库函数用于对文件夹进行操作,譬如:打开、创建文件夹、删除文件夹、读取文件夹以及遍历文件夹中的文件等,那么本小节将介绍目录相关的知识内容。原创 2022-09-06 08:00:00 · 1787 阅读 · 0 评论 -
stat函数
在 Linux 系统中,time_t 时间指的是一个时间段,从某一个时间点到某一个时间点所经过的秒数,譬如对于文件的三个时间属性来说,指的是从过去的某一个时间点(这个时间点是一个起始基准时间点)到文件最后被访问、文件内容最后被修改、文件状态最后被改变的这个时间点所经过的秒数。(3)获取文件的时间属性,包括文件最后被访问的时间、文件内容最后被修改的时间以及文件状态最后被改变的时间,并使用字符串形式将其打印出来,包括时间和日期、表示形式自定。链接文件可以分为软链接(符号链接)文件和硬链接文件。原创 2022-09-05 08:00:00 · 7733 阅读 · 0 评论 -
格式控制字符串 format
长度修饰符指明待转换数据的长度,因为 type 字段指定的的类型只有 int、unsigned int 以及 double 等几种数据类型,但是 C 语言内置的数据类型不止这几种,譬如有 16bit 的 short、unsigned short,8bit 的 char、unsigned char,也有 64bit 的 long long 等,为了能够区别不同长度的数据类型,于是乎,长度修饰符(length)应运而生,成为转换说明的一部分。可以看到,只有%和 type 字段是必须的,其余都是可选的。原创 2022-09-04 08:00:00 · 2142 阅读 · 0 评论 -
格式化 I/O ( 格式化输出 与 格式化输入 )
在前面编写学习中,会经常使用到库函数 printf()用于输出程序中的打印信息,printf()函数可将格式化数据写入到标准输出,所以通常称为格式化输出。除了 printf()之外,格式化输出还包括:fprintf()、dprintf()、sprintf()、snprintf()这 4 个库函数。除了格式化输出之外,自然也有格式化输入,从标准输入中获取格式化数据,格式化输入包括:scanf()、fscanf()、sscanf()这三个库函数,那么本小节将向大家介绍 C 语言库函数的格式化 I/O。...原创 2022-09-03 08:00:00 · 884 阅读 · 0 评论 -
检查或复位状态[ feof()函数、ferror()函数和clearerr()函数 ]
库函数 feof()用于测试参数 stream 所指文件的 end-of-file 标志,如果 end-of-file 标志被设置了,则调用feof()函数将返回一个非零值,如果 end-of-file 标志没有被设置,则返回 0。库函数 ferror()用于测试参数 stream 所指文件的错误标志,如果错误标志被设置了,则调用 ferror()函数将返回一个非零值,如果错误标志没有被设置,则返回 0。库函数 clearerr()用于清除 end-of-file 标志和错误标志。...原创 2022-09-01 08:00:00 · 531 阅读 · 1 评论 -
fseek()函数 和 ftell()函数
FILE 指针。:与 lseek()函数的 offset 参数意义相同。:与 lseek()函数的 whence 参数意义相同。:成功返回 0;发生错误将返回-1,并且会设置 errno 以指示错误原因;与 lseek()函数的返回值调用库函数 fread()、fwrite()读写文件时,文件的读写位置偏移量会自动递增,使用 fseek()可手动设置文件当前的读写位置偏移量。程序中首先调用 fopen()打开当前目录下的 test_file 文件,参数 mode 设置为"w+";...原创 2022-08-31 08:00:00 · 703 阅读 · 1 评论 -
FILE 指针、标准输入、标准输出和标准错误、打开文件 fopen()、读文件和写文件
文件 I/O 函数(open()、read()、write()、lseek()等)都是围绕文件描述符进行的,当调用 open()函数打开一个文件时,即返回一个文件描述符 fd,然后该文件描述符就用于后续的 I/O 操作。标准输入设备指的就是计算机系统的标准的输入设备,通常指的是计算机所连接的键盘;标准输出设备指的是计算机系统中用于输出标准信息的设备,通常指的是计算机所连接的显示器;标准错误设备则指的是计算机系统中用于显示错误信息的设备,通常也指的是显示器设备。原创 2022-08-27 08:00:00 · 2158 阅读 · 0 评论 -
文件I/O 截断文件
使用 ftruncate()函数进行文件截断操作之前,必须调用 open()函数打开该文件得到文件描述符,并且必须要具有可写权限,也就是调用 open()打开文件时需要指定 O_WRONLY 或 O_RDWR。上述代码中,首先使用 open()函数打开文件 file1,得到文件描述符 fd,接着使用 ftruncate()系统调用将文件截断为 0 长度,传入 file1 文件对应的文件描述符;这两个函数都可以对文件进行截断操作,将文件截断为参数 length 指定的字节长度,原创 2022-08-26 08:00:00 · 873 阅读 · 0 评论 -
fcntl函数 和 ioctl函数
执行成功的情况下,其返回值与 cmd(操作命令)有关,譬如 cmd=F_DUPFD(复制文件描述符)将返回一个新的文件描述符、cmd=F_GETFD(获取文件描述符标志)将返回文件描述符标志、cmd=F_GETFL(获取文件状态标志)将返回文件状态标志等。当 cmd=F_DUPFD 时,它的作用会根据 fd 复制出一个新的文件描述符,此时需要传入第三个参数,第三个参数用于指出新复制出的文件描述符是一个大于或等于该参数的可用文件描述符(没有使用的文件描述符);态标志 flag,并将其打印来;原创 2022-08-25 08:00:00 · 1208 阅读 · 0 评论 -
原子操作 与 竞争冒险
Linux 是一个多任务、多进程操作系统,系统中往往运行着多个不同的进程、任务,多个不同的进程就有可能对同一个文件进行 IO 操作,此时该文件便是它们的共享资源,它们共同操作着同一份文件;操作系统级编程不同于大家以前接触的裸机编程,裸机程序中不存在进程、多任务这种概念,而在 Linux 系统中,我们必须要留意到多进程环境下可能会导致的竞争冒险。竞争冒险不但存在于 Linux 应用层、也存在于 Linux 内核驱动层。原创 2022-08-24 08:00:00 · 307 阅读 · 0 评论 -
复制文件描述符(dup、dup2函数) 和 文件共享
所谓文件共享指的是同一个文件(譬如磁盘上的同一个文件,对应同一个 inode)被多个独立的读写体同时进行 IO 操作。多个独立的读写体大家可以将其简单地理解为对应于同一个文件的多个不同的文件描述符,譬如多次打开同一个文件所得到的多个不同的 fd,或使用 dup()(或 dup2)函数复制得到的多个不同的 fd 等。原创 2022-08-23 08:00:00 · 1160 阅读 · 0 评论 -
空洞文件与O_APPEND、O_TRUNC 标志
什么是空洞文件(hole file)?在上节中,介绍了 lseek()系统调用,使用 lseek 可以修改文件的当前读写位置偏移量,此函数不但可以改变位置偏移量,并且还允许文件偏移量超出文件长度。O_TRUNC 标志,调用 open 函数打开文件的时候会将文件原本的内容全部丢弃,文件大小变为 0。如果 open 函数携带了 O_APPEND 标志,调用 open 函数打开文件,当每次使用 write()函数对文件进行写操作时,都会自动把文件当前位置偏移量移动到文件末尾,从文件末尾开始写入数据。原创 2022-08-22 08:00:00 · 1277 阅读 · 0 评论 -
exit()函数、_exit()函数 和 _Exit()函数
main 函数中使用 return 后返回,return 执行后把控制权交给调用函数,结束该进程。调用_exit()函数会清除其使用的内存空间,并销毁其在内核中的各种数据结构,关闭进程的所有文件描述符,并结束进程、将控制权交给操作系统。调用函数需要传入 status 状态标志,0 表示正常结束、若为其它值则表示程序执行过程中检测到有错误发生。_exit()和_Exit()两者等价,用法作用是一样的,这 2 个函数都是系统调用。...原创 2022-08-21 08:00:00 · 4371 阅读 · 0 评论 -
erron变量、strerror函数 和 perror 函数
errno 本质上是一个 int 类型的变量,用于存储错误编号;strerror一个 C 库函数,该函数可以将对应的 errno 转换成适合我们查看的字符串信息char *strerror(int errnum); perror 函数用来查看错误信息,调用此函数不需要传入 errno,函数内部会自己去获取 errno 变量的值,调用此函数会直接将错误提示字符串打印出来,而不是返回字符串,除此之外还可以在输出的错误提示字符串之前加入自己的打印信息void perror(const char *s)。...原创 2022-08-20 08:00:00 · 936 阅读 · 0 评论 -
文件I/O基础
一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个编号(一个 ID),这个编号就是一个整数,被称为文件描述符。open 函数用于打开文件,当然除了打开已经存在的文件之外,还可以创建一个新的文件;write 函数可向打开的文件写入数据;read 函数可从打开的文件中读取数据。...原创 2022-08-19 08:00:00 · 449 阅读 · 1 评论 -
Ubuntu 16下Linaro 交叉编译器的安装
Ubuntu16下Linaro 交叉编译器的安装原创 2022-08-15 08:00:00 · 601 阅读 · 0 评论 -
Ubuntu 和 Windows 文件互传
在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到 Ubuntu 下进行编译。Windows 和 Ubuntu 下的文件互传我们需要使用 FTP 服务,设置方法如下:1. 开启 Ubuntu 下的 FTP 服务2. Windows 下 FTP 客户端安装3. FileZilla 软件设置............原创 2022-08-17 08:43:18 · 4378 阅读 · 1 评论 -
Linux应用编程概念
对于大多数首次接触 Linux 应用编程的读者来说,可能对应用编程(也可称为系统编程)这个概念并不太了解,所以在正式学习 Linux 应用编程之前,有必要向大家介绍这些简单基本的概念,从整体上认识到应用编程为何物?与驱动编程、裸机编程有何不同?了解本节所介绍的内容是掌握应用编程的先决条件,所以本节主要内容便是对 Linux 应用编程进行一个简单地介绍,让读者对此有一个基本的认识。本节将会讨论如下主题内容。⚫ 何为系统调用;⚫ 何为库函数;⚫ 应用程序的 main()函数;...原创 2022-08-18 08:00:00 · 720 阅读 · 0 评论