2017-09-13 15 views
-3

私はマシン(Red Pitaya)を起動するときに実行する必要のあるCプログラムを持っています。 ここで紹介するプログラムの先頭:起動時にCプログラムを実行する[Red Pitaya]

//my_test program 

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include "redpitaya/rp.h" 

int main(int argc, char **argv){ 

    int jj=1; 

while(1) { 

printf("Ready for experiment number %i\n",jj); 

    int i, D; 
    int32_t TrigDly; 

のように...

プログラムは、以下が含まれていuri_test.sh呼ばrun.shファイルと実行可能である:

cat /opt/redpitaya/fpga/fpga_0.94.bit>/dev/xdevcfg 
LD_LIBRARY_PATH=/opt/redpitaya/lib ./my_test 

両方のファイルは、/ root配下のディレクトリにあります。成功せず

https://askubuntu.com/questions/9853/how-can-i-make-rc-local-run-on-startup

:PuTTYのterminal-

/RedPitaya/Examples/C/Uri# ./my_test 

または

/RedPitaya/Examples/C/Uri# ./uri_test.sh 

上で手動で実行すると、プログラムは、私がここで紹介するソリューションに従うことをしようとした完全に取り組んでいます。 提案がありますか?ありがとうございました。

+1

C? C#?どちらもスクリプトではありません。または神秘的な#Cは? –

+1

あなたの質問にスクリプトを表示する必要があります。私は、CまたはC#ソースファイルをスクリプトと呼ぶことはしません(また、コンパイルした方法を正確に示す必要もあります)。だから**あなたの質問を編集する**(ソースコード行は4つのスペースで接頭辞を付ける必要があります)たくさんのことを改善するために –

+2

この質問は[tag:c]とは関係ありません、それはubuntu特有の質問です。 [systemd services](http://www.devdungeon.com/content/creating-systemd-service-files)をお読みください。また、[tag:c]スクリプトはありませんが、[tag:c]はコンパイルされた言語です。そして、 "*スタートアップ*"プログラムは原則として、シェルスクリプトかコンパイル済みのプログラムであろうと、実行可能なファイルである可能性があります。また、C#は、Windows固有の言語であれば、AFAIKのLinuxでも動作しますが、LinuxのC#プログラムを見るのはあまり一般的ではありません。 –

答えて

1

起動時にプログラムを実行する方法はいくつかありますが、initサブシステムに依存します(systemdまたはSysV形式のinitを使用していますか?)。

ところで、C言​​語のソースプログラムはscriptではなく、一般的にはexecutableに(gcc -Wall -Wextra -gを使用して)コンパイルします。あなたの場合、おそらく-Wl,-rpath,/opt/redpitaya/libのようなものをあなたのリンクgccコマンドに渡すことによって、(おそらくLD_LIBRARY_PATHの狂気を避けるために)ビルド時にrpathを設定したいと思うでしょう。

おそらく、@rebootcrontab(5)エントリで十分でしょう。

は何であれ、あなたが起動時にプログラムを起動する方法、それは一般的にそのSTDINSTDOUT、ストリームがリダイレクトされ標準エラー出力(/dev/nullに例えばは、null(4)を参照)場合、または使用できません。したがって、あなたのprintf出力がどこにも行き渡らない可能性があります。あなたのスクリプトでstdoutをリダイレクトするかもしれません。syslog(3)をCプログラムに、logger(1)をシェルスクリプトに使用することをお勧めします。*.logファイル(/var/log/)も参照してください。ところで、その環境は対話シェル(environ(7) ...を参照)と同じではないため、あなたのプログラムはおそらく非常に早い段階で失敗するでしょう(おそらく動的リンク時にld-linux.so(8)を参照してください)。LD_LIBRARY_PATHは、することが...)。

Cプログラム(おそらくgetopt_long(3))にプログラム引数を渡すことを考慮する必要があり、daemon(3)を呼び出すいくつかのオプション(たとえば--daemonize)がある可能性があります。

あなたは確かにAdvanced Linux Programmingまたは類似のものを読むべきです。

syslog(3)を使用するスタートアップ時に、プログラムのような「hello-world」プログラムを最初に正常にビルドして実行することをお勧めします。後で、あなたはRed Pitaya事件で動作するようにプログラムを改善することができます。

関連する問題