pipe와 fork를 사용한 프로그램..
글쓴이: itoti / 작성시간: 목, 2003/10/23 - 1:29오전
void Player::Play(const char *mp3name) { if (state == PAUSED && mp3name && Player::mp3name && \ !strcmp(mp3name,Player::mp3name)) Pause(); else if (mp3name) { if (state != STOPPED) Stop(); if(Player::mp3name) delete[] mp3name; Player::mp3name = strdup(mp3name); int pipes[2]; int fork_res; if (pipe(pipes) == 0) { fork_res = fork(); if (fork_res == -1) { cerr << "Can't fork !!\n"; exit(1); } if (fork_res == 0) { if (close(2)) cerr << "Can't close stderr\n"; dup2(pipes[1],2); close(pipes[0]); close(pipes[1]); char *str = new char[128]; sprintf(str,"%d",buffersize); execlp(playercommand,playercommand,"",mp3name,(char *)0); cerr << "Can't execlp " << playercommand << "\n"; exit(1); } else { close(pipes[1]); char *buf = new char[2048+1]; char *p; char c; int failed = 0; for (int i = 0; i< 8; i++) { c='\0'; p=buf; while (c != '\n') { read(pipes[0],&c,1); *p++ = c; } *p = '\0'; if(i==3 && *buf != '\n') {failed =1; i=8;} if(i==5 && *buf == 'I') {failed =1; i=8;} } delete[] buf; close(pipes[0]); sleep(1); playerpid = fork_res; state = PLAYING; emit Playing(); if (failed) Stop(); } } } }
프로세서를 이용하여 mp3플레이 하는 소스의 일 부분인데요..
여기서 플레이가 안되고 멈추게 되는 데요..
pipe가 생성이 안되는 것 같은데.. 그이유는 무엇인가요??
플레이를 하면 세그멘테이션 오류가 뜨거나 그냥 멈춰 버립니다...
혹시 이유를 아시거나..
주석을 좀 달아 주시겠어요..
프로세서 관련 코드를 처음 접해봐서.. 너무 어렵네요...
감사합니다.
Forums:
댓글 달기