2013-06-02 3 views
1

Buildroot에 의해 생성 된 Linux에서 실행되는 임베디드 장치 용 Qt 라이브러리를 사용하여 프로그램을 작성했습니다. 내 프로그램을 시작하기 위해 S80custom이라는 스크립트를 작성하여 /etc/init.d/ 디렉토리에 두었습니다. 스크립트의 내용은 다음과 같습니다 내 프로그램은 시스템 시작시 실행할 때 내 프로그램이 필요한 파일에 액세스 할 수없는 이유는 무엇입니까?

#!/bin/sh 

if [ ! -d "/root/files/" ]; then 
    mkdir /root/files/ 
fi 

if [ ! -d "/root/Test/" ]; then 
    mkdir /root/Test/ 
fi 

if [ ! -d "/root/Test/Log/" ]; then 
    mkdir /root/Test/Log/ 
fi 

export TSLIB_CONSOLEDEVICE='none' 
export TSLIB_FBDEVICE='/dev/fb0' 
export TSLIB_TSDEVICE='/dev/input/event1' 
export TSLIB_PLUGINDIR='/usr/lib/ts' 
export TSLIB_CONFFILE='/etc/ts.conf' 
export TSLIB_CALIBFILE='/etc/pointercal' 
export QWS_MOUSE_PROTO=tslib:'/dev/input/event1' 

/root/Test/Test -qws 

는 그러나 /root/files에 배치 된 파일에 액세스 할 수 없습니다. 저는 QFile 클래스와 그 멤버 함수를 동일하게 사용했습니다. 내가 표준 C + + 라이브러리를 시도하고 그들은 일하지만, 이상하게 QFile 파일을 열 수 없으며 QFile이 작업에 사용해야합니다.

내가 뭘 잘못하고 있니?

로그인 후에도 명령 프롬프트에서 내 응용 프로그램을 실행할 때 완벽하게 작동한다는 것을 언급해야합니다.

편집이 파일을 열 생각되는 코드의 부분 인 코멘트 요청으로
: 알람을 설정하는 메커니즘이 활성화

QDir directory = QDir::home(); 
if(!directory.cd("files")){ 
    LOG << directory << "does not exist or path incorrect. trying to make it"; 
    if(directory.mkdir("files")) 
    { 
     LOG << "made directory \"files\" at" << directory.absolutePath(); 
     directory.cd("files"); 
    } 
    else 
     LOG << "couldn't make diretory... do we have enough priviledges?"; 
} 

fileName = directory.absoluteFilePath("PARMLIST.BIN"); 

qDebug() << "filename to open:" << fileName; 


QFile file(fileName); 
QDataStream in(&file); 

if(!file.open(QIODevice::ReadOnly)) 
{ 
    if(CONF_INT("rdu.active") != 1) 
     AlarmManager::getInstance().setAlarm(102, true); 
    else 
     AlarmManager::getInstance().setAlarm(184, true); 
    paramMissing = true; 

    return; 
} 

을, 그 코드의 나에게 말한다 파일이 없거나 손상되었습니다. 그 외에는 오류가 없습니다. 또한 전체 경로를 파일 이름으로 지정하려고했지만 그 중 하나도 작동하지 않았습니다.

+0

을 초기화하기 위해서

export HOME="/root" 

를 추가하려고합니다. –

+0

코드 부분을 추가했습니다. 나는 커널이나 다른 어떤 에러도 내지 않는다. 단지 어떤 이유로 든 내 파일에 접근 할 수 없다. ... – Barracuda

답변

1

환경 변수가 누락되어 문제가 발생한 것으로 판단됩니다.

의는 here에서 시작하자 :

비 Windows 운영 체제에서 HOME 환경 변수입니다 존재하는 경우 사용, 그렇지 않으면 ROOTPATH에 의해 반환 된 경로().

그래서 로그인하면 HOME 변수가 올바르게 설정되어 작동하지만 init에서 프로그램을 시작할 때 가지고 있지 않습니다. 당신이 스크립트를 당신이 얻을 오류에 대한 몇 가지 정보를 추가 할 필요가

+1

네가 맞다. 나는 네 대답을보기 전에 나의'QDir directory = QDir : : home();'을'QDir directory = QDir :: root();'에 추가하면 효과적 이었지만 스크립트에 추가 한 내용을 추가하면 코드를 변경할 필요없이 프로그램이 파일에 액세스 할 수있었습니다. 고맙습니다 – Barracuda

관련 문제