Linux——mplayer项目

news/2025/3/1 1:27:47/

部分来源:看见代码就想敲

一,功能

二.VT100讲解

[1]简介

    VT100是一个古老的终端定义,后面出现的终端几乎都兼容这种终端

VT100控制码是用来在终端扩展显示的代码。比如果终端上任意坐标用不同的颜色显示字符。

规则

<1>所有的vt100控制字符都是\033开头(即esc的ascii码)。用输出字符语句来输出。

   我们可以使用printf来输出我们所有的控制字符。

<2>常用格式:

 printf("\033[字体背景颜色;字体颜色m")

 printf("需要打印的字符串");

 printf("\033[0m"); 关闭所有属性

 

背景颜色范围:40-47(若是不在该范围则代码原样输出)

40:黑

41:深红

42:绿

43:黄色

44:蓝色

45:紫色

46:深绿

47:白色

前景字符颜色:30-----------37

30:黑

31:红

32:绿

33:黄

34:蓝色

35:紫色

36:深绿

37:白色

 

【2】系统定义的特殊控制字符格式。(即系统最后一个字符不是m,而是控制字符)

1.常用系统控制字符

\033[y;xH设置光标位置        

例如:

          //表示在第5行,第3列的位置打印"123"字符串  

          printf("\033[5;3H");

           printf("123");

          printf("\033[0m");

\033[2J 清屏 

三.函数代码

1.打印菜单函数

2.打印指定目录下歌曲名函数

(1)定义playlist记录所有的歌曲名

(2)定义playlist_size记录歌曲数目

(3)定义索引记录当前播放曲目

【1】首先DIR *dir=open(dir_path)打开指定目录

【2】定义struct dirent遍历目录

【3】定义一个数组存放可播放的文件后缀

    const char *filename[] = {".mp3", ".mp4", ".avi", ".rm", ".rmvb", ".flv", ".wma"};

【4】sttchr函数以指针的形式返回符合·条件的后缀


【5】遍历目录且与数组中后缀进行比较,打印出符合条件的文件名,记录文件个数。

【6】关于index函数

index函数使用不当

在printfPlayerList 函数里,index 函数用于查找文件扩展名。不过,要是文件没有扩展名或者index

没找到·字符,P就会是 NULL。后续对 p调用strcmp函数时,就会引引发段错误。

2.管道传递命令函数

【1】fifo_fd 管道文件的描述符

【2】command为const char*的指针,直接传入管道字符串命令

【3】写入命令长度

3.播放函数

【1】用excel函数运行代码外文件

【2】运行playlist中索引为current_index的曲目

【3】exit退出

【4】通过在子进程中使用播放歌曲

4.暂停函数

向管道发送命令进行暂停,再次使用继续播放

5.停止函数

向管道发送退出命令

6.播放上一个函数

【1】首先传入记录正在播放曲目编号的索引

【2】从新定义该索引为上一首歌编号

【3】停止正在播放的歌曲

【4】退出子进程

【5】创建新的子进程播放歌曲

7.播放下一个函数

【1】首先传入记录正在播放曲目编号的索引

【2】从新定义该索引为下一首歌编号

【3】停止正在播放的歌曲

【4】退出子进程

【5】创建新的子进程播放歌曲

遇到的问题:上一个下一个只能使用一次

8.倍速函数

【1】打印倍速菜单

【2】输入选择

【3】将倍速命令写入管道

9.定位函数.

【1】打印定位的秒速

【2】输入后清空缓冲区

【3】sprintf将定位的时间转化为命令字符串

【4】将命令输入管道

10.播放方式函数

输入选择播放模式输入管道

四.主函数代码

1.打开管道:连接子父进程,需要设置为双向模式,不然父子进程创建为同一单向.

2.打印菜单进行循环控制

3.打印菜单并选择歌曲播放

【1】如果输入1时有父进程在运行,说明此时有子进程运行,歌曲在播放,停止子进程并使pid=-1;此时在创建父子进程,父进程等待子进程结束

【2】赋值给current_index索引,用于播放选择歌曲.current_index范围是0-playlist_size-1,所以在输入基础减1

遇到的问题:输入1播放歌后不打印一级菜单

4.功能实现

【1】通过父进程控制子进程

【2】case3需要结束播放,停止子进程结束,并且将pid=-1.这样如果没有播放会跳过功能,命令不会滞留在管道.

【3】如果没有播放音乐时使用停止命令会使命令滞留在管道里,在播放音乐会停止。

5.退出命令

要养成用完就关闭的习惯


http://www.ppmy.cn/news/1575644.html

相关文章

DeepSeek开源周第二日-DeepEP

&#x1f680;deepseek开源周第二天&#xff0c;DeepEP&#xff1a;专为MoE和专家并行打造的高性能通信库 &#x1f525;DeepEP 主要特点 &#x1f4a1; 高效 GPU 通信内核&#xff1a;提供高吞吐、低延迟的 all-to-all GPU 内核&#xff08;MoE dispatch & combine&…

【Go | 从0实现简单分布式缓存】-5:使用Protobuf通信

本文为极客兔兔动手写分布式缓存GeeCache学习笔记。 本文目录 一、Protobuf简述二、使用Protobuf开发三、使用protobuf的好处 一、Protobuf简述 之前已经讲过Protobuf了&#xff0c;这里在回顾一下&#xff0c;就是protobuf 即 Protocol Buffers&#xff0c;Google 开发的一种…

推荐律师事务管理系统(SpringCloud+mysql+rocketmq+deepseek)

1.深圳慧钛科技有限公司成立于2024年7月24日&#xff0c;官网地址&#xff1a;深圳慧钛律师事务管理系统&#xff08;官网&#xff09;-案件管理系统-律所档案管理-律所管理软件-律师办案系统-电子签章-律所印章-律师办公软件、律师办公系统、律所OA 。系统访问地址:深圳慧钛律…

线性模型 - 支持向量机

支持向量机&#xff08;SVM&#xff09;是一种用于分类&#xff08;和回归&#xff09;的监督学习算法&#xff0c;其主要目标是找到一个最佳决策超平面&#xff0c;将数据点分为不同的类别&#xff0c;并且使得分类边界与最近的数据点之间的间隔&#xff08;margin&#xff09…

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…

SGLang中context-length参数的默认值来源解析

SGLang中context-length参数的默认值来源解析 1. 问题背景2. 关键发现案例1&#xff1a;DeepSeek-V3案例2&#xff1a;DeepSeek-R1案例3&#xff1a;Llama-3.1-8B-Instruct 3. 实际验证4. 总结 在使用SGLang工具时&#xff0c;我们可能会遇到关于--context-length参数的设置问题…

包子凑数——蓝桥杯真题Python

包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括&#xff1a;1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来&#xff0c;所以有无限多个 运行限制 最大运行时间&#xff1a;1s最大运行内存: 256M 最大公约数 最大公…

linux 后台执行并输出日志

在Linux系统中&#xff0c;后台执行程序并输出日志通常有多种方法&#xff0c;这里列出几种常见的方法&#xff1a; 1. 使用&将命令放入后台 可以在命令的末尾加上&符号&#xff0c;将命令放入后台执行。例如&#xff1a; your_command > output.log 2>&1…