Linux
文章平均质量分 55
喵呜喵呜≈
因为你,我想成为更好的人
展开
-
树莓派学习
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。可选择1.0的版本,有显示镜像安装需多少时间。选择write,进行写入,时间显示5-10分钟,说明你的镜像文件是好的,若显示是四五十分钟说明你的文件是损坏的,需重新下载。wiringPi是树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。因为树莓派默认的源是国外的,使用apt-get 安装会失败,我们换成国内的源。原创 2022-10-18 16:10:36 · 701 阅读 · 0 评论 -
Linux——分文件编程与动静态库的生成与使用
使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):1、静态函数库,是在程序执行前就加入到目标程序中去了;原创 2022-10-16 14:16:05 · 99 阅读 · 0 评论 -
Linux——FTP云盘
server端一直在accept,等待客户端连接,有客户端接入就创建子进程对接处理指令。分为三个文件:server.c 、client.c、config.h。原创 2022-10-07 21:58:43 · 498 阅读 · 0 评论 -
Linux——网络编程概述
TCP和UDP以及一些通讯要素可以学习这个的文章:http://t.csdn.cn/lWAOQ字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种例子:在内存中双字0x01020304(DWORD)的存储方式内存地址注意:网络字节序=大端字节序(BE)x86系列CPU都是little-endian(LE)的字节序。原创 2022-10-04 13:25:18 · 343 阅读 · 0 评论 -
Linux——多线程学习
因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。主要知道进程有独立的地址空间,而线程没有独立的地址空间(同一进程内线程共享地址空间),所以一个进程奔溃后,在保护模式下不会对其他进程产生影响,但一个线程死掉等于整个进程死掉,因此多进程的程序要比多线程的程序健壮。下面demo验证线程之间是共享地址空间的,如果没有加锁,线程之间是存在竞争的 ,加锁之后能保证拿到锁的线程先只执行完,再执行其他线程。原创 2022-09-25 23:40:19 · 252 阅读 · 0 评论 -
Linux——进程间通信(共享内存)
共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。简单的demo:创建一个共享内存,让服务端和客户端同时读取共享内存上的数据。3.信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。1.共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。2.因为多个进程可以同时操作,所以需要进行同步。原创 2022-09-23 19:45:04 · 354 阅读 · 0 评论 -
Linux——进程间通信(消息队列)
系统建立IPC通讯 (消息队列、信号量和共享内存) 时必须指定一个ID值。简单的demo:server端可以发送消息给client端,client端可以实时获取打印到终端显示。3.消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。1.消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。字符的输入与输出使用gets()和puts()的原因:scanf输入。原创 2022-09-17 16:07:12 · 453 阅读 · 0 评论 -
Linux——进程间通信(命名管道FIFO)
若没有指定O_NONBLOCK(默认),只读 open 要阻塞到某个其他进程为写而打开此 FIFO。类似的,只写 open 要阻塞到某个其他进程为读而打开它。FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据,并且“先进先出”。一旦创建了一个 FIFO,就可以用一般的文件I/O函数操作它。简单理解可以说是创造一个管道,可以用read,write等对管道进行一个读写,从而实现通信。①.FIFO可以在无关的进程之间交换数据。原创 2022-09-14 12:35:07 · 327 阅读 · 0 评论 -
Linux——进程(fork与vfork)
fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1(此时才能更好理解他的返回值)。fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。原创 2022-09-06 16:10:54 · 391 阅读 · 0 评论 -
Linux——fopen、fwrite、fread的使用
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。--返回值: 文件顺利打开后,指向该流的文件指针就会被返回。"w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。"w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。"ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。"r" 以只读方式打开文件,该文件必须存在。原创 2022-09-06 11:13:20 · 504 阅读 · 0 评论 -
Linux——简单修改文件配置
思路:打开目标文件,读取文件内容到缓存区,找到修改的字符串,把缓存区内容重新写入文件。原创 2022-09-05 17:52:10 · 335 阅读 · 0 评论 -
Linux——简单实现cp指令
实现cp指令原创 2022-09-05 11:08:12 · 287 阅读 · 0 评论 -
Linux系统编程——线程创建等待及退出2
参考博文:https文章目录.线程同步之互斥量加锁解锁和互斥锁限制共享资源的访问死锁:线程条件控制实现线程的同步实现如下:.线程同步之互斥量加锁解锁和互斥锁限制共享资源的访问案例:#include <pthread.h>#include <stdio.h>int g_data=0;pthread_mutex_t mutex;void *func1(void *arg){ printf("t1:%ld thread is creat\n",(uns原创 2021-01-18 22:38:52 · 92 阅读 · 0 评论 -
Linux系统编程——线程创建等待及退出
推参考博文推荐:https://blog.csdn.net/weixin_47921928/article/details/108269056案例:线程创建等待及退出#include <pthread.h>#include <stdio.h>void *func1(void *arg){ static int ret =10; printf("t1:%ld thread is creat\n",(unsigned long)pthre原创 2021-01-18 15:58:40 · 96 阅读 · 0 评论 -
Linux系统编程——进程间通信(单机)
下文转自:https://blog.csdn.net/chenpuo/article/details/81183678文章目录前言一、管道1.特点2.原型3.例子二、命名管道FIFO1.特点2.原型3.例子三.消息队列1.特点2.原型3.例子四、共享内存1.特点2.原型3.例子五.信号量1.特点2.原型3.例子五种通讯方式总结前言进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信原创 2021-01-17 22:20:28 · 116 阅读 · 0 评论 -
Linux系统编程——Linux的信号机制
下文来自:https://blog.csdn.net/qq_37653144/article/details/81942026文章目录信号机制信号的产生信号处理方式信号处理过程Linux信号的使用方法注册信号signal函数sigaction函数发送信号kill函数raise函数sigqueue函数Linux信号集信号的阻塞和挂起信号机制信号机制是一种使用信号来进行进程之间传递消息的方法,信号的全称为软中断信号,简称软中断。信号的本质是软件层次上对中断的一种模拟(软中断)。它是一种异步通信的处理机制,转载 2021-01-17 14:29:26 · 209 阅读 · 0 评论 -
进程退出及父进程等待子进程退出
文章目录两种退出方式:正常退出和异常退出退出函数:父进程等待子进程退出两种退出方式:正常退出和异常退出退出函数:父进程等待子进程退出解析返回的状态码,要靠上面的宏status:一个整型数指针非空:子进程退出状态放在它所指向的地址中空:不关心退出状态子进程退出状态不被收集,会变成僵尸进程(Z+)查看进程状态:ps –aux|grep a.out(a.out为编译生成的程序)示例代码(父进程等待子进程退出wait(NULL)):#include <stdio.h>原创 2021-01-15 16:22:38 · 750 阅读 · 0 评论 -
linux系统编程——vfork创建进程
fork与vfork的区别:验证vfork保证子进程先运行,当子进程调用exit退出后,父进程才能进行代码:运行结果:#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(){ pid_t pid; int cnt; pid=vfork(); if(pid>0){ whil原创 2021-01-15 15:29:49 · 146 阅读 · 0 评论 -
Linux系统编程——多进程和exec族函数
优秀文章https://blog.csdn.net/weixin_47921928/article/details/108243812fork函数调用成功,返回两个pid1.当返回值等于0,带边当前进程是子进程2.返回值非负数,代表当前进程为父进程父子进程判断:代码:运行结果:#include <stdio.h>#include <unistd.h>#include <sys/types.h>int main(){ pid_t p原创 2021-01-14 16:29:33 · 108 阅读 · 0 评论 -
Linux系统编程——进程概述
一、什么是程序?什么是进程?程序时静态的概念,当对一个.c文件进行编译(gcc xxx.c -o pro)时,在磁盘中生成的pro文件,就是程序进程是程序的一次运行活动,通俗来说就是,程序运行起来了,系统就多了一个进程二、如何查看系统中有哪些进程?1.使用PS指令:实际操作中,通常配合grep指令来查找程序中是否存在某一个进程2.使用top指令三、什么是进程标识符?每个进程都有一个非负整数表示唯一ID,叫做pid,类似身份证。编程调用getpid()函数获取自身的进程表示符getppid获转载 2021-01-14 16:03:19 · 113 阅读 · 0 评论 -
文件其它函数讲解及文件收尾(fputc,fgetc,feofc)
/*************************************** *功能:写一个字节到文件流中 *参数: * @c 写入的字符 * @stream 流指针 *返回值: * 成功返回字符 * 失败返回EOF或errno *************************************/ int fputc(int c, FILE *stream);示例:#include <stdio.h>#include <s原创 2021-01-14 15:46:08 · 238 阅读 · 0 评论 -
Linux系统编程——标准c库写入结构体到文件
实现代码(参考):#include <stdio.h>struct Test{ int a; char c;};int main(){ FILE *fp; struct Test data[2]={{100,'b'},{101,'a'}}; struct Test data2[2]; fp=fopen("./file","w+"); int n_write=fwri原创 2021-01-14 14:48:31 · 211 阅读 · 1 评论 -
Linux系统编程——标准c库打开创建文件读写文件光标移动
fopen原型:FILE *fopen(char *filename, char *mode)filename 文件名称mode 打开模式:r 只读方式打开一个文本文件rb 只读方式打开一个二进制文件w 只写方式打开一个文本文件wb 只写方式打开一个二进制文件a 追加方式打开一个文本文件ab 追加方式打开一个二进制文件r+ 可读可写方式打开一个文本文件rb+ 可读可写方式打开一个二进制文件w+ 可读可写方式创建一个文本文件wb+ 可读可写方式生成一个二进制文件a+ 可读可写追加原创 2021-01-13 23:18:42 · 141 阅读 · 0 评论 -
总结open与fopen的区别
文章目录1. 来源2. 移植性3. 适用范围4. 文件IO层次5. 缓冲1. 来源从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。PS:从来源来看,两者是有千丝万缕的联系的,毕竟C语言的库函数还是需要调用系统API实现的。2. 移转载 2021-01-13 22:14:46 · 100 阅读 · 0 评论 -
Linux系统编程——open、read、write、close、光标定位lseek
Linux系统编程——open、read、write、close、光标定位lseek前言:Linux当中有句俗语:一切皆文件。即涉及的有关内容都由文件描述符(fd)代替。而对文件的操作,常用的函数就是open、read、write、close。一、openopen所需的头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>123open的原型:int open(const原创 2021-01-13 22:06:08 · 232 阅读 · 0 评论 -
Linux系统编程——文件操作小应用之实现cp指令
需要了解:1.c语言参数int main(int argc,char **argv)cp src.c des.c参数: 0 1 2 三个参数argv[0] argv[1] argv[2]2.思路:a、打开src.cb、读src的bufc、打开/创建des.cd、将buf写入des.ce、close 两个文件以上实现cp3.了解argc argv 的用法#include <stdio.h>int main(int原创 2021-01-13 22:05:55 · 157 阅读 · 0 评论 -
文件编程小应用之修改程序的配置文件
把TEST.config 中的TEST.config=4改成TEST.config =5实现代码:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>int main(int argc,c原创 2021-01-13 22:05:42 · 169 阅读 · 1 评论 -
linux系统编程——写一个整数到文件
向文件写入一个整型数实现代码(参考):#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>int main(){ int fd; int data=100; int data2=0; fd=open("./file",O_RD原创 2021-01-13 22:04:40 · 315 阅读 · 0 评论