![](https://img-blog.csdnimg.cn/e8aa6374b587441b90d51a8fe4e90e53.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux系统编程
文章平均质量分 80
Linux系统编程学习过程
嵌入式JunG
一个热爱嵌入式的小学生
展开
-
Linux阶段性项目——FTP服务器
FTP为的缩写,即文件传输协议,是TCP/IP协议族中的协议之一。FTP是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。RFC 959定义了FTP协议规范。是互联网上使用的最广泛的文件传输协议,用于Internet上的控制文件的双向传输。FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中计算机之间传送文件。原创 2023-12-26 22:05:53 · 1192 阅读 · 0 评论 -
Linux网络编程——Socket相关代码实战
编译结果:服务端相关代码在上一章节中,客户端write相关信息给服务端,服务端先read并打印调试信息再write发送给客户端中的read,客户端再将read调试信息打印出来。(2)connect函数。(1)socket函数。(1)socket函数。(2)connect函数。(1)socket函数。(3)listen函数。(4)accept函数。(3)write函数。(6)write函数。(3)write函数。原创 2023-12-25 23:43:57 · 416 阅读 · 0 评论 -
Linux网络编程——Socket编程步骤及常用API
内核为每个由服务器进程接受的客户连接创建一个已连接套接字(表示 TCP 三次握手已完成),当服务器完成对某个给定客户的服务时,相应的已连接套接字就会被关闭。模式,listen 函数只用于服务器端,服务器进程不知道要与谁连接,因此,它不会主动此要求与某个进程连接,只是一直监听是否有其他客户进程与之连接,然后响应该连接清求,并对它做出处理,UDP:数据报套接字定义了一种无连按的服,数据通过相互独立的报文进行传输, 是无序的,并且不保证是可靠,无差错的。服务器调用,用于从已完成连接队列队头返回下一个已完成连接。原创 2023-12-23 22:36:41 · 988 阅读 · 0 评论 -
Linux网络编程——字节序
网络字节序 就是 大端字节序:4个字节的32 bit值以下面的次序传输,首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。例如 0x12345678,从高位到低位的字节依次是0x12、0x34、0x56和0x78。2.Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。1. Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。主机字节序 就是 小端字节序,现代PC大多采用小端字节序。原创 2023-12-21 23:46:25 · 428 阅读 · 0 评论 -
Linux网络编程——概述、TCP/UDP的对比
一台拥有IP地址的主机可以提供许多服务,比如Web服务、 FTP服务、SMTP服务等。那么,主机是怎样区分不同的网络服务呢?也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;就从嵌入式出发,有Linux与Android、IOS、各种单片机,或者是Android对Android等等。,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别的。一对一,一对多, 多对一和多对多的交互通信。原创 2023-12-21 21:02:18 · 704 阅读 · 0 评论 -
Linux线程——条件变量
条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。条件变量使用之前必须首先初始化静态初始化:可以把常量PTHREAD_COND_INITIALIZER赋给静态分配的条件变量。动态初始化:;如果条件变量是动态分配的,可以使用。原创 2023-12-20 20:52:36 · 985 阅读 · 0 评论 -
Linux线程——互斥锁
互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运行。在设计时需要规定所有的线程必须遵守相同的数据访问规则。只有这样,互斥机制才能正常工作。操原创 2023-12-19 22:32:18 · 990 阅读 · 0 评论 -
Linux线程——常用API
一个线程或者是可汇合(joinable,默认值),或者是脱离的(detached)。当一个可汇合的线程终止时,它的线程ID和退出状态将留存到另一个线程对它调用pthread_join。脱离的线程却像守护进程,当它们终止时,所有相关的资源都被释放,我们不能等待它们终止。如果线程被取消,由rval_ptr指定的内存单元就置为PTHREAD_CANCELED。当pthread_create成功返回时,由tidp指向的内存单元被设置为新创建线程的线程ID。(指针,输入方式是地址,同时要注意是void *型)原创 2023-12-18 22:22:20 · 1778 阅读 · 0 评论 -
Linux线程——基本知识
典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。原创 2023-12-18 22:22:11 · 867 阅读 · 0 评论 -
Linux进程通信——信号量
计数器。原创 2023-11-26 22:12:38 · 1149 阅读 · 0 评论 -
Linux进程通信——信号(二)
sigection。原创 2023-11-26 17:49:20 · 851 阅读 · 0 评论 -
Linux进程通信——信号(一)
signal.h。原创 2023-11-23 23:44:51 · 1939 阅读 · 0 评论 -
Linux进程通信——共享内存
PC_CREAT或直接传0(只需获取而不用创建,yi)输入0即可,表示映射进的共享内存可读可写。由shmget函数返回的共享内存标识。shmget函数返回的共享内存标识符。共享内存连接到当前进程中的地址位置。shmat函数连接好的共享内存区。回共享存段的指针(虚拟地址)shmat函数返回的地址指针。页的整数倍,即以兆为单位。连接到当前进程的地址空间。不删除所指定的共享内存区。动对该共享内存的访问。原创 2023-11-23 00:30:00 · 636 阅读 · 0 评论 -
Linux进程通信——消息队列
写入读取后内容还存在于Linux内核中。原创 2023-11-21 22:14:52 · 310 阅读 · 0 评论 -
Linux进程通信——IPC、管道、FIFO的引入
不同进程之间传播或交换信息无名管道和命名管道)消息队列、信号量、共享存储、Socket、Streams不同主机上的两个进程IPC。原创 2023-11-21 02:45:00 · 393 阅读 · 0 评论 -
Linux进程——system函数、popen函数
函数定义函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。 如果system()调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果 system()调用成功则最后会返原创 2023-11-19 16:03:13 · 463 阅读 · 0 评论 -
VMware虚拟网络连接的三种方式
什么是桥接模式?桥接模式就是将主机网卡与虑拟机虑拟的网卡利用进行通信。在桥接的作用下,类似于把虑拟为一个,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相与。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机。是当前VMware虚拟机经常使用的一种模式,但也有不足之处,主要是每台虚拟机需要独立配置,例如DNS(解析域名),会出现有的上得了网,有的上不了,同时比较。原创 2023-11-01 03:30:00 · 967 阅读 · 0 评论 -
Linux环境下编写代码和执行程序
两种模式需要交替进行才能完成完整的代码编写,我们通过实操给给大家演示,以便大家更好的理解。输入xandr会输出电脑屏幕分辨率,再输入xandr -s+电脑分别率即可调试成合适大小。输入Ctrl+Shift+‘+’字体放大,Crtl+’-‘字体缩小。程序执行格式:gcc+创建好的文件名.c+ -o +生成的文件名。命令行模式本意是创建源代码文件,创建后不可输入代码,需按下。,那么首先需要从输入模式转为命令行模式,操作方式是。,可以发现输出桌面上的文件名,即文件保存完毕。即可完成退出vi模式并保存代码。原创 2023-10-30 17:13:41 · 3061 阅读 · 0 评论 -
虚拟机和Windows的文件传输
直接将虚拟机linux系统的文件拖曳到windows桌面,或者直接将windows的文件拖曳到虚拟机linux系统当中,可以实现文件传输。当然复制粘贴方式也可以,但是前提是需要下载安装好VMware tools。原创 2023-10-31 20:49:57 · 4029 阅读 · 0 评论 -
Linux的简介和环境搭建
Linux是一套和的类Unix操作系统,是一个基于和的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的。原创 2023-10-30 15:37:04 · 216 阅读 · 0 评论 -
Linux的基础常用指令
1.移动:mv *.c +文件名→所有.c文件剪切到此左边文件下(文件名前有空格)2.重命名:mv a.c b.c→将文件a重命名为文件b(b前面有空格)通过vi+文件名调用后其内部内容一样。退回上层文件夹(cd后有空格)移动 mv *a.c new1。重命名 mv a.c b.c。列出当前文件夹有哪些文件。第一中创建方法是手动创建。原创 2023-10-31 00:32:47 · 371 阅读 · 0 评论 -
Linux进程——vfork函数
vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。fork中子进程会拷贝父进程的所有数据,子进程是父进程的地址空间。fork执行时无先后顺序,父进程与子进程会争夺执行。vfork中子进程共享父进程的地址空间。原创 2023-11-16 03:30:00 · 380 阅读 · 0 评论 -
Linux文件操作——标准c库对文件操作
Linux、标准c库对文件操作的区别Linux、标准c库对文件操作的区别。原创 2023-11-13 23:30:15 · 233 阅读 · 0 评论 -
Linux文件操作——原理
1.文件描述符是文件的索引:对于内核而言,所有打开文件都。文件描述符是一个。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符,将其作为参数传递给read和write。按照惯例,,UNIX shell使用与进程的相结合,与标准输出(打印键盘输入)相结合,与相结合。STDIN.FILENO、STDOUTFILENO、STDERR FILENO这几个宏代替了0、1、2这几个数。原创 2023-11-11 15:09:31 · 407 阅读 · 0 评论 -
Linux文件操作——修改配置文件(应用)
由编译结果可知,将leng=50的下一位0修改成5,其结果为leng=505,实现了配置文件的修改。1、找到所搜索的字符串,则该函数返回第一次匹配的字符串的。2、如果未找到所搜索的字符串,则返回。原创 2023-11-12 21:48:41 · 283 阅读 · 0 评论 -
Linux文件操作——打开及创建
与open函数一样,返回值也是文字描述符。返回值也是一个较小的非负整数。1.pathname:指向文件的路径2.modemode是文件的创建模式,这里与open函数的mode有区别,这里的创建模式为系统自带。可执行:S_IXUSR可写:S_IWUSRL可读:S_IRUSR可读、可写、可执行:S_IRWXU代码展示int main()int fd;//此时文件已经不存在if(fd == -1)//文件不存在输出小于零的负数//提示文件打开失败//创建一个可读可写可执行的文件。原创 2023-11-09 21:33:00 · 760 阅读 · 0 评论 -
Linux文件操作——写入及读取
附加参数解读:调用该函数时,只需将需要关闭文件的文件描述符fd传进来即可实现关闭。int fd:fd为创建文件的文件描述符const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要写入的字节size_f count:写入字节的长度从定义的buf中写入count个字节并传到文件描述符fd对应的文件。int fd:fd为创建文件的文件描述符const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要读取的字节。原创 2023-11-10 12:20:10 · 978 阅读 · 0 评论 -
Linux文件操作——实现cp指令(应用)
cp [原文件] [目标文件]cp 1.c 2.c功能是将(内容相同,实现拷贝)又编译结果可知,总共有三个输入参数,同时输出每个参数字符串内容cp 1.c 2.c→cp为第一个参数,1.c为第二个参数,2.c为第三个参数。原创 2023-11-12 21:48:23 · 474 阅读 · 0 评论 -
Linux文件操作——文光标移动
移动成功后该函数的返回值是光标针对于文件头移动的字节数,可以利用该函数计算文件字节大小。使用lseek函数需要包含以下两个头文件。原创 2023-11-10 17:11:44 · 264 阅读 · 0 评论 -
Linux文件操作——其他类型数据写到文件并读取
可见一开始结构体数组data2中没有数据,通过调用两个函数后将结构体数组data1的值赋给结构体数组data2,实现了。可见一开始结构体data2中没有数据,通过调用两个函数后将结构体data1的值赋给结构体data2,实现了。写入整型变量时我们将函数的第二个参数写入整型变量名并取地址,在计算字节时只需计算整型变量的字节数即可。那么我们可以写入一个整型变量并读取,也可以写入一个结构体并读取,甚至写入一个结构体数组并读取。可见data2原先值为0,但通过调用两个函数后,data2的值为100,实现了。原创 2023-11-13 13:31:33 · 205 阅读 · 0 评论 -
Linux进程——基本知识
A.进程标识符与文件标识符fd类似:每一个进程都有一个非负整数标志的唯一ID,叫做pid,类似于身份证。PID是程序被操作系统加载到内存成为进程后动态分配的资源,每次程序执行的时候,操作系统都会重新加载,PID在每次加载的时候都是不同的。Pid=0::交换进程(swapper)作用——进程调度(例:多程序运行时谁作为主程序)Pid=1: init进程,作用—系统初始化(例:开机界面)B.父进程标识符。原创 2023-11-14 14:33:15 · 175 阅读 · 0 评论 -
Linux进程——exec族函数、exec族函数与fork函数的配合
然后再调用execl,用execl 找到并执行echoarg,将当前进程main替换成进程echoarg,就会执行ehcoarg里面的代码,所以”after execl” 没有在终端被打印出来。不会执行if中的代码。可见echoarg存在于当前路径并不存在于bin路径下,所以调用execl函数无法找到echoarg并执行echoarg,调用失败返回值为-1,则会继续执行if函数里的代码。定义一个指针数组并将其地址作为execvp函数后面的参数,同时要以NULL结尾,便可以找到并执行ls可执行文件。原创 2023-11-19 00:45:00 · 701 阅读 · 0 评论 -
Linux进程——创建
调用该函数时,需包含以下头文件。原创 2023-11-14 20:50:52 · 275 阅读 · 0 评论 -
Linux进程——进程的退出、子进程退出的收集、孤儿进程
进程退出主要分为两种:正常退出、异常退出正常退出分为以下几种:1.main函数调用return2.进程调用exit(),标准c库3.进程调用 _exit() 或者 _Exit() ,属于系统调用4.进程最后一个线程返回5.最后一个线程调用pthread exit(4和5与线程有关)异常退出分为以下几种:1.调用abort函数2.当进程收到某些信号时,如 ctrl+C3最后一个线程对取消 (cancellation) 请求做出响应退出函数分别有exit()、_exit()、_Exit(),其函数原原创 2023-11-16 23:58:44 · 615 阅读 · 0 评论