Linux系统下用C语言制作简易的无界面mp3播放器

在此之前需要安装 mpg123(无界面的 mp3 播放软件)

安装:

在命令框下输入以下命令
sudo apt-get install mpg123
使用:
在终端输入:mpg123 曲目名( 如果曲目不在终端当前所处的路径下, 曲目名需要加上路径)
安装成功后打开编译器运行代码即可播放自定义路径下的音乐

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
#include <signal.h>
#include <dirent.h>
#include <sys/stat.h>

void fun (int a);
void caidan(void);

int i=0;
glob_t mp3={0};
pid_t pid=0;

int main()
{
	printf("这是个没有界面的播放器\n");
	glob("/home/ping/音乐/mp3文件/*.mp3",0,NULL,&mp3);//获取mp3文件
	for(int i=0;i<mp3.gl_pathc;i++)
	{
		printf("%d\t%s\n",i,mp3.gl_pathv[i]);//打印这个目录下所有的mp3文件名
	}
	printf("输入你想要播放的音乐代码\n");
	scanf("%d",&i);
	while(getchar()!='\n');
	pid=fork();//创建子进程
	if(pid>0)//父进程执行函数
	{
		signal(17,fun);//信号改造函数
		while(1)
		{
			caidan();
		}
	}
	if(pid==0)//子进程执行函数
	{
		execlp("mpg123","mpg123",mp3.gl_pathv[i]);//播放mp3音乐
	}
	return 0;
}
void fun (int a)
{
	if(i<0)//防止i值过小
	{
		printf("此歌序号为最小\n");
		i=0;
	}
	if(i>=mp3.gl_pathc)//防止i值过大
	{
		printf("此歌序号为最大\n");
		i=mp3.gl_pathc-1;
	}
	int num=0;
	pid_t p=waitpid(pid,&num,WNOHANG);//判断子进程是否是正常退出
	if(p==pid)
	{
		if(WIFEXITED(num))//正常退出,播放下一首
		{
			i++;
			pid=fork();//重新创建子进程
			if(pid==0)
			{
				execlp("mpg123","mpg123",mp3.gl_pathv[i]);
			}
		}
		else//不正常退出
		{
			pid=fork();//重新创建子进程
			if(pid==0)
			{
				execlp("mpg123","mpg123",mp3.gl_pathv[i]);
			}
		}
	}
}
void caidan(void)
{
	printf("请输入你想要的操作\n");
	printf("w--上一曲\tn--下一曲\ts--暂停\nb--播放\t\tq--退出播放器\n");
	char choose=0;
	scanf("%c",&choose);
	while(getchar()!='\n');
	switch(choose)
	{
		case'w':
			i--;
			kill(pid,14);//发送14号信号杀死子进程
			break;
		case'n':
			i++;
			kill(pid,14);//发送14号信号杀死子进程
			break;
		case's':
			kill(pid,19);//发送19号信号暂停代码运行
			break;
		case'b':
			kill(pid,18);//发送18号信号继续代码运行
			break;
		case'q':	
			signal(17,SIG_IGN);//取消信号改造函数
			kill(pid,9);//结束进程
			system("stty echo");
			printf("\033[?25h");//回显
			return;
			break;
		default:printf("输入有误!!!\n");
			break;
	}
}

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux下,我们可以基于C语言实现一个简易的电子词典。以下是一个简单的实现示例: 首先,我们需要一个词典文件,可以是一个文本文件,其中包含词汇和其对应的解释。我们可以使用一个自定义的格式,例如每行包含一个词汇和其解释,用制表符或其他分隔符区分两者。 接下来,我们编写一个C程序,实现打开词典文件、读取查询词汇、查找对应解释并输出的功能。 首先,我们需要使用stdio.h头文件来实现文件读写功能,以及string.h头文件来处理字符串。 然后,我们定义一个函数,比如dict_search,用于接收用户输入的查询词汇,并在词典文件中查找对应的解释。 在函数内部,我们首先打开词典文件,可以使用fopen函数,接受词典文件路径和读取模式作为参数。 接着,我们将用户输入的查询词汇与词典文件中的每一行进行比较。可以使用fgets函数逐行读取词典文件,并使用strcmp函数比较输入的查询词汇和当前行的词汇。 如果找到匹配的词汇,我们可以使用strtok函数分割当前行,以获取词汇和解释,然后将解释输出给用户。 如果没有找到匹配的词汇,我们可以输出一个提示信息,告诉用户该词汇不在词典中。 最后,我们在主函数中接收用户输入的查询词汇,并调用dict_search函数进行查询和输出。 这只是一个简单的电子词典实现示例,实际上,我们还可以添加更多功能,例如增加新的词汇、编辑和删除已存在的词汇等。实现这些功能需要进一步的编程和逻辑设计。 ### 回答2: 在Linux下基于C语言实现一个简易电子词典可以通过以下步骤进行: 1. 首先,需要创建一个字典文件,可以是文本文件格式,其中包含需要查询的单词和对应的解释。可以使用文本编辑器(如vi或gedit)创建一个名为dictionary.txt的文件,并在其中添加单词和解释,每个单词和解释一行。 2. 在C语言中,可以使用标准库函数来读取字典文件,并将其加载到内存中以便进行查询。 3. 创建一个函数来处理用户输入的查询词,并查找字典文件中是否存在该词。 4. 如果找到了该词,则将其解释打印到屏幕上;如果未找到,则提示用户词典中没有该词。 5. 可以使用循环来实现一个简单的命令行界面,以便用户能够进行多次查询,直到用户选择退出程序。 以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_WORD_LEN 100 #define MAX_DEF_LEN 1000 void searchWord(char *word) { FILE *file = fopen("dictionary.txt", "r"); if (file == NULL) { printf("Unable to open dictionary file.\n"); return; } char line[MAX_DEF_LEN]; char currentWord[MAX_WORD_LEN]; int found = 0; while (fgets(line, sizeof(line), file)) { sscanf(line, "%s", currentWord); if (strcmp(currentWord, word) == 0) { found = 1; printf("Definition: %s\n", line + strlen(currentWord)); break; } } if (!found) { printf("Word not found in the dictionary.\n"); } fclose(file); } int main() { char word[MAX_WORD_LEN]; while (1) { printf("Enter a word to search for (or 'q' to quit): "); scanf("%s", word); if (strcmp(word, "q") == 0) { break; } searchWord(word); } return 0; } ``` 这是一个简单的电子词典实现,用户可以输入要查询的单词,该程序将在字典文件中查找并显示单词的定义。用户输入“q”时程序退出。注意,这只是一个基本示例,实际应用中可能需要更复杂的功能和更高级的数据结构来提高性能和扩展性。 ### 回答3: 在Linux下使用C语言实现一个简易电子词典,可以按照以下步骤进行: 1. 使用C语言编写一个菜单界面,提供用户选择不同的功能,如添加词条、查找词条、删除词条和退出等选项。 2. 创建一个数据结构,用于存储词典中的词条。可以使用链表或散列表的形式进行存储,每个词条包含词语和对应的释义。 3. 实现添加词条功能。用户可以输入待添加的词语和对应的释义,程序将其添加到数据结构中。 4. 实现查找词条功能。用户可以输入待查找的词语,程序将根据输入的词语在数据结构中查找对应的释义,并将其显示给用户。 5. 实现删除词条功能。用户可以输入待删除的词语,程序将根据输入的词语在数据结构中找到对应的词条并删除。 6. 实现退出功能。用户选择退出程序后,程序将保存已经添加的词条并结束运行。 以上步骤仅为简易电子词典的实现思路,具体实现过程中还需要处理异常情况,例如输入错误的命令或词条不存在等。另外,可以考虑增加一些额外功能,如修改词条、显示所有词条等,以提升词典的实用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值