쉘에서 실행되는 명령과 프로그램에서 실행되는 명령의 차이점은 무엇입니까?

쉘에서 실행되는 명령과 프로그램에서 실행되는 명령의 차이점은 무엇입니까?

aplay가 웨이브 파일을 계속해서 재생할 수 있는지 테스트하고 싶었기 때문에 먼저 쉘 창에서 2가지 다른 명령을 시도했습니다(대상을 퍼티).

aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw

aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav

둘 다 일하고 있습니다.

이제 C++를 사용하여 자동으로 실행되는 간단한 프로그램 main()을 만들었습니다.

    char ac[100] = {0};
    int n = 0;
    while (1)
    {
        printf("---%d \n", ++n);
        strcpy(ac, "sudo nice -n -10 aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw");
        system(ac);

        delay(1000); //delay 1s

        strcpy(ac, "sudo nice -n -10 aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav");
        system(ac);
        delay(1000);
    }

지연() 기능:

int delay(int nMs)
{
    struct timespec requested_time, remaining;
    requested_time.tv_nsec = (nMs%1000)*1000000;
    requested_time.tv_sec = (nMs/1000);
    return nanosleep (&requested_time, &remaining);
}

그 결과 aplay가 test2.wav에서 멈췄습니다.

root@linaro-ubuntu-desktop:/TEST# sudo nice -n -10 aplay -P -c 1 -t raw -r 16000 -f S16_LE audio/test1.raw
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono  --- ok, heard 
root@linaro-ubuntu-desktop:/TEST# sudo nice -n -10 aplay -P -c 1 -t wav -r 32000 -f S16_LE audio/test2.wav
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono   --- ok, heard 

root@linaro-ubuntu-desktop:/TEST# ./Test
--- 1
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono --- ok, heard
^CAborted by signal Interrupt...
--- 2
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono --- nok, no sound, hang
^CAborted by signal Interrupt...
Playing WAVE 'audio/test2.wav' : Signed 16 bit Little Endian, Rate 32000 Hz, Mono  --- nok, no sound, hang
^CAborted by signal Interrupt...
--- 3
Playing raw data 'audio/test1.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono --- nok, no sound, hang
^CAborted by signal Interrupt...
^C

이것은 제가 아는 범위를 넘어서는 문제입니다... 누구든지 설명하고 이를 방지하는 방법을 도와줄 수 있습니까? 제가 사용하고 있는 운영체제는 다음과 같습니다.

lsb_release -a:
No LSB modules are available.
Distributor ID: Linaro
Description:    Linaro 11.10 (development branch)
Release:        11.10
Codename:       oneiric

cat /proc/version:
Linux version 3.0.35-2666-gbdde708 (root@jt-G31M-S2L) (gcc version 4.6.2 20110630 (prerelease) (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20) ) #14 SMP PREEMPT Thu May 26 11:21:54 CST 2016

사운드 카드는 wm8962-audio입니다.

관련 정보