Это добавит текущую воспроизводимую песню в список воспроизведения, определенный в коде. Требуется libmpdclient.
Дальнейшие улучшения включают разрешение аргументов и/или файла конфигурации для хоста, порта, прохода, списка воспроизведения. libmpdclient doc — ваш друг.
#include
#include
//D(x) function for debug messages
//#define DEBUG
#ifdef DEBUG
#define D(x) do { x; } while(0)
#else
#define D(x) do { } while(0)
#endif
#define HOST "YOUR_HOSTNAME"
#define PORT YOUR_PORTNUMBER //usually it's 6600
#define PASS "YOUR_PASSWORD" //comment out if no password
#define PLAYLIST "PLAYLIST_NAME_TO_ADD_CURRENT_SONG_TO"
struct mpd_connection* conn(){
D(printf("%s %s\n","Connecting to",HOST));
const char* host = HOST;
unsigned port = PORT;
struct mpd_connection* c = mpd_connection_new(host,port,0);
enum mpd_error err = mpd_connection_get_error(c);
if(err != 0){
printf("Error code: %u. View error codes here: https://www.musicpd.org/doc/libmpdclient/error_8h.html\n",err);
return 0;
}
#ifdef PASS
const char* pass = PASS;
if(mpd_run_password(c,pass) == false){
printf("%s\n","Bad password");
return 0;
}
#endif
D(printf("%s %s\n","Connected to",HOST));
return c;
}
int main(){
struct mpd_connection* c = conn();
if(c == 0) return -1;
struct mpd_song* curr = mpd_run_current_song(c);
const char* curr_uri = mpd_song_get_uri(curr);
D(printf("Currently playing: %s\n",curr_uri));
if(mpd_run_playlist_add(c,PLAYLIST,curr_uri)){
printf("%s %s %s %s\n","Added",curr_uri,"to playlist",PLAYLIST);
}
else{
printf("%s\n","Some error");
return -1;
}
return 0;
}
Я добавил несколько проверок и немного отладки; делай с кодом как хочешь.
Обычно, когда вы видите ошибку нет места в Linux, это может быть связано с тем, что системе либо не хватает блочного хранилища, либо не хватает инодов .
Поскольку вы упомянули, что у вас все еще есть свободное место (блок )в вашей системе, вы можете проверить, остались ли у вас иноды , запустив:
df -i
Исчерпание инодов обычно происходит в системе, где много маленьких файлов.