七牛直播网站怎么做优惠卷网站建设怎么挣钱

张小明 2026/1/3 9:15:59
七牛直播网站怎么做,优惠卷网站建设怎么挣钱,越秀重点场所,建站平台 discuz目录1. 认识信号2. 信号的产生方式2.1 通过键盘给终端发送信号2.1.1 信号都有哪些2.1.2 自定义信号捕捉singal()函数#xff08;证明ctrlc是2号信号编号#xff09;2.1.3 前台进程(目标进程)后台进程2.1.补#xff1a;前后台相关命令2.1.4 给进程发送信号2.2 系统调用发…目录1. 认识信号2. 信号的产生方式2.1 通过键盘给终端发送信号2.1.1 信号都有哪些2.1.2 自定义信号捕捉singal()函数证明ctrlc是2号信号编号2.1.3 前台进程(目标进程)后台进程2.1.补前后台相关命令2.1.4 给进程发送信号2.2 系统调用发送信号2.2.1 kill系统调用给指定进程发送信号2.2.2 raise系统调用给自己发送信号2.2.3 abort函数给自己发送6号信号2.3 使用命令行kill向进程发信号2.4 硬件异常产生信号补core VS term2.5 软件条件产生信号2.5.1 alarm定时器系统调用2.5.2 基本alarm验证-体会IO效率问题2.5.3 设置重复闹钟pause函数2.5.4 如何理解软件条件1. 认识信号信号和信号量没有任何关系信号举例闹钟红绿灯上课铃声狼烟电话铃声肚子叫敲门声脸色不好…信号概念中断我们正在做的事情是一种事件的异步通知机制。对计算机系统来讲信号是一种给进程发送的用来进行事件异步通知的机制信号举例你在网上买了很多件商品再等待不同商品快递的到来。但即便快递没有到来你也知道快递来临时你该怎么处理快递。也就是你能“识别快递”当快递员到了你楼下你也收到快递到来的通知但是你正在打游戏需5min之后才能去取快递。那么在在这5min之内你并没有下去去取快递但是你是知道有快递到来了。也就是取快递的行为并不是一定要立即执行可以理解成“在合适的时候去取”。在收到通知再到你拿到快递期间是有一个时间窗口的在这段时间你并没有拿到快递但是你知道有一个快递已经来了。本质上是你“记住了有一个快递要去取”当你时间合适顺利拿到快递之后就要开始处理快递了。而处理快递一般方式有三种1. 执行默认动作幸福的打开快递使用商品2. 执行自定义动作快递是零食你要送给你你的女朋友3. 忽略快递快递拿上来之后扔掉床头继续开一把游戏快递到来的整个过程对你来讲是异步的你不能准确断定快递员什么时候给你打电话关于信号的基本结论如何产生信号源给进程产生信号的事件。如何识别识别信号是内置的进程识别信号是内核程序员写的内置特性。处理逻辑事前已知信号产生之后你知道怎么处理吗知道。如果信号没有产生你知道怎么处理信号吗知道。所以信号的处理方法在信号产生之前已经准备好了。处理时机处理信号立即处理吗我可能正在做优先级更高的事情不会立即处理什么时候合适的时候处理流程信号到来 | 信号保存 | 信号处理处理方式怎么进行信号处理啊a.默认 b.忽略 c.自定义 后续都叫做信号捕捉。相当一部分进程的默认信号处理方式就是进程终止2. 信号的产生方式2.1 通过键盘给终端发送信号2.1.1 信号都有哪些ctrlc给目标进程发送信号让进程终止目标进程指的就是前台进程ctrl\终止进程$kill-l# 列出各种信号信号编号1) SIGHUP2) SIGINT3) SIGQUIT4) SIGILL5) SIGTRAP6) SIGABRT7) SIGBUS8) SIGFPE9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN35) SIGRTMIN136) SIGRTMIN237) SIGRTMIN338) SIGRTMIN439) SIGRTMIN540) SIGRTMIN641) SIGRTMIN742) SIGRTMIN843) SIGRTMIN944) SIGRTMIN1045) SIGRTMIN1146) SIGRTMIN1247) SIGRTMIN1348) SIGRTMIN1449) SIGRTMIN1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-1243) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-263) SIGRTMAX-164) SIGRTMAX2.1.2 自定义信号捕捉singal()函数证明ctrlc是2号信号编号相关函数#includesignal.h// 函数指针类型重定义typedefvoid(*sighandler_t)(int);// 功能修改信号编号执行指定的功能sighandler_tsignal(intsignum,sighandler_t handler);// 参数signum 信号编号【9、19号信号无法自定义证明见2.2.2的使用示例】 handler 函数指针修改后的执行方法示例testsig.cc测试自定义信号捕捉#includeiostream#includeunistd.h#includesignal.h#includesys/types.hvoidhandleSig(intsig){std::cout获得了一个信号sigstd::endl;}intmain(){signal(SIGINT,handleSig);intcnt0;while(true){std::couthello world, cnt ,pid: getpid()std::endl;sleep(1);}return0;}Makefile.PHONY:all all:testsig testsig:testSig.cc g -o $ $^ -stdc11 .PHONY:clean clean: rm -f testsig mykill2.1.3 前台进程(目标进程)后台进程前台进程$ ./XXX在命令行直接运行某进程则默认为前台进程。前台进程可以从标准输入中获取内容【键盘输入即为标准输入】。命令行shell是前台进程。前台进程只能有一个。前台进程的本质目的就是要从键盘获取数据的。后台进程$ ./YYY 在命令行运行进程后加符号则为后台进程。后台进程无法从标准输入中获取内容【键盘输入即为标准输入】所以ctrlc对后台进程无效。后台进程可以有多个。共性前后台进程都可以向标准输出打印为什么前台进程可以处理键盘输入后台进程不能处理键盘输入答键盘只有一个只能向一个固定的进程输入数据。谁需要输入数据就把谁放在前台。在前台执行2.1.1的代码之后执行ls pwd等命令行操作bash没反应是为什么答./testsig运行之后bash自动被切换成了后台进程ls pwd等命令是给./testsig的但是./testsig进程没有调用cin或者scanf命令处理工作所以无法对ls pwd等命令作出反应。在后台之后2.1.1的代码之后执行ls pwd等命令行操作bash可以反应是为什么答./testsig 把./testsig进程放在了后台运行前台依然是bash进程则bash收到ls pwd命令之后则做出对应的反应。为什么ctrlc等通过键盘组合键产生的信号只能发给前台进程答因为键盘组合键也是键盘输入# 查看运行中的进程psajx|head-1psajx|greptestsig# ps: 核心命令Process Status 的缩写用于查看系统中进程的运行状态。# ajxaall显示所有终端tty关联的进程包括其他用户启动的进程默认ps只显示当前用户当前终端的进程 jjobs显示作业控制相关字段列比如PPID父进程 ID、PGID进程组 ID、SID会话 ID、TTY控制终端、STAT进程状态等 x显示无控制终端的进程比如后台守护进程、无终端启动的进程这类进程的 TTY 字段为 ?# head: 工具命令读取输入文件 / 管道数据的「前 N 行」默认前 10 行。(此处读取第一行表头)# grep: 核心工具Global Regular Expression Print 的缩写用于在输入中搜索「匹配指定字符串 / 正则」的行并输出文本过滤工具。怎样杀死后台进程使用 kill 命令kill -9 PID号杀掉对应PID的进程2.1.补前后台相关命令补充说明2.1.1的代码在后台运行时使用ls pwd jobs等命令则2.1.1代码的输出会继续而ls pwd jobs命令也会有相应的输出他们的输出混在一起了其中显示器此时就是共享资源此问题为数据不一致问题命令功能./YYY 后台运行进程使用此命令后会输出[任务号] 进程PIDjobs查看所有的后台任务fg 任务号将指定的后台任务切到前台【foreground 前台】ctrlz暂停进程同时将进程切到后台bg 任务号让指定的后台任务恢复运行配合ctrlz执行【background 后台】2.1.4 给进程发送信号信号产生之后并不是立即处理的所以要求进程必须把信号记录下来记录在哪struct tast_struct{ unsigned int pending;//位图结构 }比特位的位置信号的编号。比特位的内容是否收到属于操作系统的数据结构体对象给目标进程发送信号的本质向目标进程写信号即修改位图修改位图需要使用pid或者信号的编号修改位图本质是修改内核的数据只有操作系统可以修改内核的数据不管信号怎么产生发送信号在底层必须让OS发送。用户要修改内核数据则操作系统必须提供发送信号的系统调用即kill命令kill就是使用操作系统发信号的系统调用补信号 VS 通信IPC狭义理解通信IPC进程间通信数据从用户到用户信号人通过操作系统给进程发信号广义理解信号和通信IPC都是通知某种事件如何记录2.2 系统调用发送信号2.2.1 kill系统调用给指定进程发送信号使用kill系统调用给进程发送信号#includeiostream#includesys/types.h#includesignal.h// ./mykill signumber pidintmain(intargc,char*argv[]){if(argc!3){std::cout./mykill signumber pidstd::endl;return1;}intsignumstd::stoi(argv[1]);pid_t targetstd::stoi(argv[2]);intnkill(target,signum);if(n0){std::coutsend signum to targetsuccessstd::endl;}return0;}2.2.2 raise系统调用给自己发送信号raise系统调用给自己发送信号NAME raise-send a signal to the caller SYNOPSIS#includesignal.hintraise(intsig);使用示例自定义1-32号信号之后使用raise顺序给自己发送信号。运行到9号信号之后会自动杀死自己#includeiostream#includeunistd.h#includesignal.h#includesys/types.hvoidhandleSig(intsig){std::cout获得了一个信号sigstd::endl;}intmain(){for(inti1;i32;i)signal(i,handleSig);for(inti1;i32;i){sleep(1);// if(i 9 || i 19) continue;raise(i);}intcnt0;while(true){std::couthello world, cnt ,pid: getpid()std::endl;sleep(1);}return0;}2.2.3 abort函数给自己发送6号信号abort固定给自己发送原始功能的6号信号使用abort之后自定义的6号信号函数不起作用。NAME abort-cause abnormal process termination SYNOPSIS#includestdlib.hvoidabort(void);使用示例#includeiostream#includeunistd.h#includesignal.hvoidhandleSig(intsig){std::cout获得了一个信号sigstd::endl;}intmain(){for(inti1;i32;i)signal(i,handleSig);// for(int i 1; i 32; i)// {// sleep(1);// if(i 9 || i 19) continue;// raise(i);// }intcnt0;while(true){std::couthello world, cnt ,pid: getpid()std::endl;abort();sleep(1);}return0;}输出6号信号并退出即abort给自己发送6号信号。2.3 使用命令行kill向进程发信号使用 kill 命令kill -n PID号n是第n个信号PID是进程对应的PID号2.4 硬件异常产生信号在C/C中程序崩溃的常见的两种情况除0野指针除0错误进程收到8号信号8) SIGFPE浮点数错误。野指针错误进程收到11号信号11) SIGSEGVSegmentation Violation段错误。SIGFPE P1990 Core Floating-pointexception(浮点数异常)SIGSEGV P1990 Core Invalid memoryreference(无效的内存引用)总结程序崩溃的原因是进程收到的某种信号导致进程结束。这种信号是谁发送的见2.1.4操作系统发送信号以上两种方式触发OS给进程发送信号的流程进程犯错了 → OS识别到进程出错并判断犯错的类型 → OS给进程发送对应信号#includeiostream#includeunistd.h#includesignal.hvoidhandleSig(intsig){std::cout获得了一个信号sigstd::endl;exit(13);}intmain(){for(inti1;i32;i)signal(i,handleSig);// for(int i 1; i 32; i)// {// sleep(1);// if(i 9 || i 19) continue;// raise(i);// }intcnt0;while(true){sleep(1);std::couthello world, cnt ,pid: getpid()std::endl;// int a 10;// a / 0; // 除0错误/* 验证除0错误解除上面2行代码验证野指针错误解除下面2行代码 */int*pnullptr;*p100;// 野指针错误}return0;}除0错误中操作系统如何知道程序犯错了答CPU完成计算CPU有各种寄存器状态(标志)寄存器有一个bit位标识CPU当前计算是否溢出。CPU是硬件OS是软硬件资源的管理者当程序出错OS会识别到硬件出错即发现计算溢出而CPU中的寄存器保存当前进程的上下文(包括current-task_struct)所以OS给此目标进程发送对应的8号信号。野指针错误补core VS termterm没有类似core的中间过程进程直接退出SIGINT的默认处理动作是终止进程SIGQUIT的默认处理动作是终止进程并且Core Dump。Core Dump当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上文件名通常是core这叫做Core Dump。即核心转储—支持debug。然后进程才退出。但是在云服务器上core dump功能是被禁止掉的为什么要禁止掉了解云服务器是生产环境core要在测试环境中使用。如何查看如何打开ulimit -a查看用户层对应的一些设置其中core file size为0表示core功能是关掉的。ulimit -c 大小可以打开core file size临时打开的方案如果要彻底打开要修改配置文件或者内核【例如ulimit -c 40960打开core功能并设置其生成文件大小为40960KB】此时再次运行除0错误的文件则会生成一个名为core的文件。为什么要进行核心转储进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug 事后调试。一个进程允许 产生多大的core 文件一个进程允许 产生多大的core 文件取决于进程的Resource Limit (这个信息保存 在PCB中)。默认是不允许产生 core 文件的, 因为core 文件中可能包含用户密码等敏感信息,不安全。core文件的使用将异常终止的程序使用debug方式进行编译之后进入gdb通过core-file core命令来直接定位文件出错的位置回看07博客3.2.2小节的子进程状态statuscore dump标志表示是否core dump验证子进程statusMakefile文件testsig:testSig.cc g -o $ $^ -g -stdc11 .PHONY:clean clean: rm -f testsigtestSig.cc文件#includeiostream#includecstdio#includevector#includefunctional#includeunistd.h#includesignal.h#includesys/types.h#includesys/wait.hintmain(){pid_t idfork();if(id0){sleep(2);printf(子进程\n);inta10;a/0;exit(1);}intstatus0;waitpid(id,status,0);printf(signal: %d, exit code: %d, core dump: %d\n,(status0x7F),(status8)0xFF,(status7)0x1);return0;}终端指令$ulimit-c40960# 打开core dump功能$make# debug编译testSig.cc程序$ ./testsig# 运行程序子进程 signal:8,exitcode:0, core dump:1# 由输出结果看到core dump为1。查看当前目录有一个core文件补没有出现core文件并且我将ulimit -c 0执行之后coredump仍然为“1”同一个原因如下回到home目录sysctl kernel.core_pattern使用此指令查看core 文件的生成路径和命名规则(kernel.core_pattern变量的含义即为core文件的生成路径和命名规则)我的kernel.core_pattern显示如下内容kernel.core_pattern |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -F%F -- %E。核心意思是Linux 内核不会直接生成传统的core.xxx原始核心文件而是将程序崩溃的核心转储core dump数据通过管道|交给/usr/share/apport/apport程序处理。✔总结这个配置的实际效果当你的程序崩溃时触发 core dump系统会内核捕获到 core dump 事件不生成原始 core 文件把崩溃的关键信息PID、信号、程序路径等通过%xx占位符替换和核心数据通过管道传给apportapport接收数据后在/var/crash/目录生成一个崩溃报告文件文件名类似_home_user_test.1000.crash如果你开启了 apport 的自动提交功能它会询问是否向 Ubuntu 官方发送该报告。✔如果你需要「传统的原始 core 文件」而非 apport 报告如果你的目的是用gdb调试原始 core 文件比如gdb ./程序 core.1234需要修改kernel.core_pattern配置关闭 apport 接管让内核直接生成 core 文件方法 1临时生效重启系统失效sudosysctl -w kernel.core_patterncore.%p.%t# 生成 core.进程号.时间戳 的原始文件方法 2永久生效重启后仍有效编辑内核配置文件sudovi/etc/sysctl.conf添加 / 修改以下行替换原来的 apport 配置kernel.core_pattern core.%p.%t # 自定义命名格式%pPID%t时间戳避免覆盖生效配置sudosysctl -p✔验证重新执行之前的指令即可修改后执行sysctl kernel.core_pattern输出core.%p.%t即成功。之后程序崩溃时会在工作目录生成原始 core 文件如core.1234.1699999999。$ulimit-c0# 关闭core dump功能$make# debug编译testSig.cc程序$ ./testsig# 运行程序子进程 signal:8,exitcode:0, core dump:0# 由输出结果看到core dump为0。查看当前目录没有core文件2.5 软件条件产生信号软件条件产生信号例子写进程 → 管道 → 读进程。其中读进程关闭时写进程会收到SIGPIPE信号自动结束。管道是软件实现的基于文件的管道的读进程被关闭即软件的条件不满足则终止进程。2.5.1 alarm定时器系统调用alarm定时器系统调用NAME alarm-set an alarm clockfordelivery of a signal SYNOPSIS#includeunistd.hunsignedintalarm(unsignedintseconds);// 参数alarm(x),在x秒之后要求OS给进程发送信号alarm(0),取消闹钟// 返回值返回值为上一个闹钟剩余时间例 调用alarm(5)-闹钟响之后-返回值为0调用alarm(5)-过了3秒-第二次调用alarm(10)【重置闹钟】-返回值为2(表示上一个闹钟剩余时间为2秒)调用 alarm 函数可以设定一个闹钟也就是告诉内核在seconds 秒之后给当前进程发SIGALRM 信号该信号的默认处理动作是终止当前进程。这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。打个比方,某人要小睡一觉,设定闹钟为30分钟之后响20分钟后被人吵醒了,还想多睡一会儿,于是重新设定闹钟为15分钟之后响“以前设定的闹钟时间还余下的时间”就是10分钟。如果seconds值为0,表示取消以前设定的闹钟,函数的返回值仍然是以前设定的闹钟时间还余下的秒数。使用示例#includeiostream#includeunistd.h#includesignal.h#includesys/types.hvoidhandleSig(intsig){std::cout获得了一个信号sigstd::endl;exit(13);}intmain(){alarm(1);// 设定1秒的闹钟for(inti1;i32;i)signal(i,handleSig);intcnt0;while(true){std::coutcount: cntstd::endl;}return0;}testsig:testSig.cc g -o $ $^ -stdc11 .PHONY:clean clean: rm -f testsig运行上述程序打印14号14) SIGALRM信号。最后输出为count:1128372.5.2 基本alarm验证-体会IO效率问题修改代码后重新运行将IO操作去掉只进行数量#includeiostream#includeunistd.h#includesignal.h#includesys/types.hintcnt0;voidhandleSig(intsig){std::cout获得了一个信号sig cnt: cntstd::endl;exit(13);}intmain(){alarm(1);// 设定1秒的闹钟// for (int i 1; i 32; i)// signal(i, handleSig);signal(SIGALRM,handleSig);// int cnt 0;while(true){// cout本质是IO xshell获取命令./testSig-在云服务器运行-通过网络-我们看到// std::cout count: cnt std::endl;cnt;}return0;}输出结果可见和有IO相比有数量级上的差异。是cpu操作IO访问的是外设根据冯诺依曼结构木桶效用获得了一个信号14 cnt:562508419 结论闹钟会响一次默认终止进程有IO效率低2.5.3 设置重复闹钟pause函数设置重复闹钟#includeiostream#includeunistd.h#includesignal.h#includesys/types.hvoidhandleSig(intsig){std::cout获得了一个信号sig pid: getpid()std::endl;alarm(1);// 每次闹钟倒计时终止并发送信号之后重设闹钟。}intmain(){signal(SIGALRM,handleSig);alarm(1);while(true){std::cout., pid: getpid()std::endl;sleep(1);}return0;}pause函数及使用NAME pause-waitforsignal SYNOPSIS#includeunistd.hintpause(void);DESCRIPTIONpause()causes the callingprocess(orthread)to sleep until a signal is delivered that either terminates the processorcauses the invocation of a signal-catching function.pause()使调用进程或线程休眠直到信号被传递终止进程或导致调用信号捕获函数。 RETURN VALUEpause()returns only when a signal was caughtandthe signal-catching function returned.Inthiscase,pause()returns-1,anderrno is set to EINTR.使用示例1通过pause()函数实现通过信号来控制程序运行。每次收到信号执行handleSig函数执行完暂停。#includeiostream#includeunistd.h#includesignal.h#includesys/types.hvoidhandleSig(intsig){std::cout获得了一个信号sig pid: getpid()std::endl;intnalarm(1);std::coutn: nstd::endl;}intmain(){signal(SIGALRM,handleSig);alarm(1);while(true){pause();}return0;}使用示例2模拟操作系统的运行方式#includeiostream#includevector#includefunctional#includeunistd.h#includesignal.h#includesys/types.h////////////func/////////////voidSched(){std::cout我是进程调度std::endl;}voidMemManger(){std::cout我是周期性的内存管理正在检查有没有内存问题std::endl;}voidFflush(){std::cout我是刷新程序我在定期刷新内存数据到磁盘std::endl;}/////////////////////////////usingfunc_tstd::functionvoid();std::vectorfunc_tfuncs;// 每隔一秒完成一些任务voidhandleSig(intsig){std::cout#########################std::endl;for(autof:funcs)f();std::cout#########################std::endl;intnalarm(1);}intmain(){funcs.push_back(Sched);funcs.push_back(MemManger);funcs.push_back(Fflush);signal(SIGALRM,handleSig);alarm(1);while(true)// 操作系统运行方式{pause();}return0;}2.5.4 如何理解软件条件在操作系统中信号的软件条件指的是由软件内部状态或特定软件操作触发的信号产生机制。这些条件包括但不限于定时器超时如alarm函数设定的时间到达、软件异常如向已关闭的管道写数据产生的SIGPIPE信号等。当这些软件条件满足时操作系统会向相关进程发送相应的信号以通知进程进行相应的处理。简而言之软件条件是因操作系统内部或外部软件操作而触发的信号产生。最小堆alarm的数据结构为最小堆。设定闹钟就是在最小堆中插入一个对象最小堆自动调整把超时时间最小的节点调整到堆顶OS扫描只查看堆顶堆顶时间到之后执行对应的函数并删除堆顶节点再次调整。OS内堆闹钟的管理即先描述再组织即转换成对堆的管理。软件条件软件用软件设计条件超时。本章总结示例收到第一次2号信号之后将2号信号还原默认功能。#includeiostream#includevector#includefunctional#includeunistd.h#includesignal.h#includesys/types.hvoidhandler(intsig){std::couthello sig: sigstd::endl;signal(2,SIG_DFL);// 2号信号默认动作是终止std::cout恢复处理动作std::endl;}intmain(){signal(2,handler);// 自定义捕捉// signal(2, SIG_IGN); // 忽略信号while(true){sleep(1);std::cout.std::endl;}return0;}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

百色做网站哈尔滨广告制作公司

对于身处制造业、零售业或服务业的中小企业管理者而言,是否常常面临这样的困境:新员工入职后,为找一份产品资料不得不翻遍各个文件夹;客户提出一个技术咨询,客服需要多次转接才能找到答案;企业内部积累了大…

张小明 2025/12/27 10:26:42 网站建设

河南郑州网站制作模块网站怎么做

DBeaver GIS数据查看器完全指南:零代码掌握空间数据可视化 【免费下载链接】dbeaver DBeaver 是一个通用的数据库管理工具,支持跨平台使用。* 支持多种数据库类型,如 MySQL、PostgreSQL、MongoDB 等;提供 SQL 编辑、查询、调试等功…

张小明 2025/12/28 6:34:51 网站建设

东莞建材网站建设做美食网站的素材图片

SQLite 是 Python 内置的轻量级数据库,无需单独的服务器进程,使用文件存储数据。它适合小型应用、原型开发或嵌入式系统,支持标准 SQL 语法。下面详细介绍 sqlite3 模块的用法和示例。1. 连接数据库使用 sqlite3.connect() 创建数据库连接。如…

张小明 2025/12/28 6:34:39 网站建设

网站流量提升方法工业设计灵感网站

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

张小明 2025/12/28 6:34:55 网站建设

个人空间网站wordpress如何去掉加密保护

红帽 Linux 设备与模块管理全解析 在红帽 Linux 系统中,对设备和模块的管理是系统管理的重要组成部分。以下将详细介绍设备信息管理、终端与调制解调器的安装和管理、各类设备的安装以及内核模块的管理等内容。 设备信息管理 在红帽 Linux 中,Kudzu 工具会在 /etc/syscon…

张小明 2025/12/28 6:34:47 网站建设

哪个素材网站免费常熟网站建设哪家好

Tsukimi第三方Emby客户端:打造极致影音体验的完整指南 【免费下载链接】tsukimi A simple third-party Emby client 项目地址: https://gitcode.com/gh_mirrors/ts/tsukimi 在数字娱乐日益丰富的今天,一款优秀的媒体客户端能显著提升你的观影体验…

张小明 2025/12/28 6:36:07 网站建设