Linux学习笔记
Linux学习笔记
近视未看清
这个作者很懒,什么都没留下…
展开
-
信号量编程实现进程互斥
无信号量时#include <stdio.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/sem.h>#include <sys/shm.h>#include <string.h>int main(){ /*子进程*/ if(fork() == 0){ int n = 5; /*模拟对临界资源的访问*/原创 2021-08-20 15:26:50 · 195 阅读 · 0 评论 -
Linux popen函数的使用
#include <stdio.h>int main(){ /*缓存数组*/ char buf[512] = {0}; /*将ls -l执行的结果写入管道*/ FILE *fp = popen("ls -l","r"); if(fp == NULL){ perror("popen"); return -1; } /*将结果从管道中读到缓存*/ fread(buf,1,sizeof(buf),f原创 2021-08-06 14:04:55 · 178 阅读 · 0 评论 -
Linux 使用文件锁实现多进程的文件互斥访问
#include <sys/wait.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <sys/file.h>int main(){ pid_t pid = fork(); //创建子进程 if(pid == -1){原创 2021-08-06 11:44:32 · 522 阅读 · 0 评论 -
C++ 单例模式
有缺陷的懒汉式#include <iostream>using namespace std;class Single{ private: /*构造函数私有化*/ Single(){ cout<<"constructor created"<<endl; } /*禁用拷贝构造函数*/ Single(Single &) = delete;原创 2021-07-29 15:17:23 · 115 阅读 · 0 评论 -
Linux 时间戳获取及转换
#include <stdio.h>#include <time.h>int main(){ time_t t; //时间戳 struct tm *p; time(&t); //获取时间戳 p=localtime(&t); //将时间戳转换为本地时间 printf("时间戳:%ld\n",t); printf("%d-%d-%d %d:%d:%d\n",(1900+原创 2021-07-21 13:48:09 · 465 阅读 · 0 评论 -
pugixml读写xml文件
pugixml包含三个文件,分别为pugixml.cpp,pugixml.hpp,pugiconfig.hpp.(没有的话需自行下载),使用时将这三个文件添加到工程中,并包含相应的头文件。编译时一定要编译pugixml.cpp文件。实例代码#include <iostream>using namespace std;#include "pugixml.hpp"#include "pugiconfig.hpp"using namespace pugi;bool ReadXm原创 2021-07-12 14:58:32 · 2197 阅读 · 0 评论 -
Linux网络编程
server.c#include <stdlib.h>#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h>#include <unistd.h>原创 2021-07-02 23:03:14 · 116 阅读 · 0 评论 -
条件控制实现线程同步
#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>int data = 0; //互斥量pthread_mutex_t mutex; //锁pthread_cond_t cond = PTHREAD_COND_INITIALIZER; //创建条件变量,并用宏进行初始化//线程t1处理函数void *fun1(void *param)原创 2021-07-01 22:29:49 · 103 阅读 · 0 评论 -
线程同步之互斥量加锁解锁
不加锁的代码#include <stdio.h>#include <pthread.h>#include <unistd.h>int data = 0; //互斥量//线程t1处理函数void *fun1(void *param){ for(int i=0;i<5;i++){ printf("t1 : data = %d\n",data++); sleep(1); }}//线程t2处理函数void *fun2(voi原创 2021-07-01 20:44:22 · 125 阅读 · 0 评论 -
Linux多线程编程
#include <stdio.h>#include <pthread.h>//子线程任务void *fun1(void *param){ static char *p = "\"my work has finished\""; //子线程返回数据 printf("t1:my id is %ld\n",(unsigned long)pthread_self()); printf("t1:param = %d\n",*((int原创 2021-06-29 22:03:12 · 106 阅读 · 0 评论 -
Linux进程间通信之信号携带消息
signalget.c#include <stdio.h>#include <signal.h>#include <sys/types.h>#include <unistd.h>//信号捕获回调函数,软中断void handler(int signum,siginfo_t *info,void *flag){ printf("sinum = %d\n",signum); //信号编号 if(flag!=NULL) //判断消原创 2021-06-29 00:00:52 · 267 阅读 · 0 评论 -
Linux进程间通信之共享内存
shmw.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>int main(){ int shmid; key_t key; char *shmaddr;原创 2021-06-28 21:15:46 · 113 阅读 · 0 评论 -
Linux进程间通信之消息队列
进程1#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <string.h>//消息队列链表结点struct msgbuf { long mtype; /* message type, must be > 0 */ char原创 2021-05-21 22:45:49 · 115 阅读 · 2 评论 -
Linux进程间通信之管道通信
匿名管道(用于亲缘进程间通信)#include <stdio.h>#include <stdlib.h>#include <fcntl.h> /* Obtain O_* constant definitions */#include <unistd.h>int main(){ int fd[2];//管道参数,fd[0]:读端,fd[1]:写端 char buf[1024] = {0}; if(原创 2021-05-21 15:27:09 · 109 阅读 · 0 评论 -
Linux文件光标移动
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int fd; //打开文件 fd = open("./demo1file",O_RDWR原创 2021-05-19 17:29:29 · 260 阅读 · 0 评论 -
Linux文件读取
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int fd; char *buf =(char *) malloc(15); //开辟15个字节原创 2021-05-19 17:02:38 · 235 阅读 · 0 评论 -
Linux文件写入
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int fd;//文件描述符 char *buf = "Linux filewrite";//要写原创 2021-05-19 16:36:11 · 312 阅读 · 2 评论 -
Linux打开及创建文件
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>int main(){ int fd; //文件描述符 fd = open("./demo1file",O_RDWR|O_CREAT,0600);//如果文件不存在创建新的文件,0600表示可读可写权限 printf("%d\n",fd); return 0;原创 2021-05-19 15:36:42 · 122 阅读 · 0 评论 -
Linux(树莓派)字符设备驱动编写、编译、测试
编写驱动代码寄存器的操作参考芯片手册。#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h> //class devi.原创 2021-03-11 16:06:34 · 172 阅读 · 0 评论 -
基于树莓派的Linux字符设备驱动框架
#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h> //class devise声明#include <linux原创 2021-03-10 22:56:07 · 83 阅读 · 0 评论 -
使用交叉编译工具进行Linux内核(硬件平台-树莓派3b)编译
安装交叉编译工具链sudo apt-get install gcc-arm-linux-gnueabihf下载Linux内核源码Linux内核源码下载内核配置使用厂家提供的config进行配置,树莓派1的工程是bcmrpi_defconfig;树莓派2、3的工程是bcm2709_defconfig。ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig此命令功能是获取bcm2.原创 2021-03-10 21:54:58 · 191 阅读 · 0 评论 -
树莓派串口编程
初次使用树莓派串口编程,需要配置。/* 修改 cmdline.txt文件 */>cd /boot/>sudo vim cmdline.txt删除【】之间的部分dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait/*修改 inittab文件 */原创 2021-03-03 14:28:43 · 96 阅读 · 1 评论 -
wiringPI库实现继电器操作
#include <stdio.h>#include <wiringPi.h>int main(){ if(wiringPiSetup ()==-1){ //硬件初始化函数 printf("初始化失败!\n"); return -1; } pinMode (7, OUTPUT);//io口模式设置 digitalWrite(7,HIGH);//输出高原创 2021-03-03 12:19:33 · 87 阅读 · 0 评论 -
树莓派第3代基础配置
1. 串口登陆设备破解默认情况,树莓派的串口和蓝牙连接。想办法断开蓝牙连接,把串口用来数据通信。1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。dtoverlay=pi3-miniuart-bt这样就停止了蓝牙,解除了对串口的占用。2.然后再修改根目录的"cmdline.txt",将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。dwc_otg.lpm_enable=0 console=tty1 console=serial0,11520原创 2020-11-07 18:24:25 · 227 阅读 · 0 评论 -
Linux父进程等待子进程退出
父进程等待子进程退出,并搜集子进程的退出状态。#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <wait.h>int main(){ int fpid = getpid();//获取父进程的进程号 int pid = fork(); int cnt=0;原创 2020-10-31 16:12:06 · 134 阅读 · 0 评论 -
linux进程创建之fork与vfork
一个现有的进程可以调用fork函数创建一个新的进程。原函数如下:NAME fork - create a child processSYNOPSIS #include <sys/types.h> #include <unistd.h> pid_t fork(void);返回值:子进程返回0,父进程返回子进程的ID,出错返回-1。测试代码如下:#include <stdio.h>#include原创 2020-10-27 13:59:44 · 147 阅读 · 0 评论 -
linux下文件编程之实现cp命令
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char **argv){ if(argc!=3) //判断是否为三个参数 { printf("语法格式错误\n");原创 2020-10-26 15:31:10 · 184 阅读 · 0 评论