2017-09-13 60 views
-3

我有一個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下的目錄中。 PuTTY的手動運行時程序完美的工作端 -

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

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

我試圖按照這裏的解決方案提出:

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

沒有成功。 有什麼建議嗎?謝謝。

+1

C? C#?也不是腳本。或者神祕的#C是? –

+1

你應該在你的問題中顯示腳本。我不會調用C或C#源文件的腳本(並且還需要顯示編譯它的精確程度)。所以**編輯你的問題**(源代碼行需要前綴四個空格)來改善它很多 –

+2

這個問題與[tag:c]無關,這是一個ubuntu的具體問題。請閱讀[systemd services](http://www.devdungeon.com/content/creating-systemd-service-files)。此外,沒有[tag:c]腳本,[tag:c]是一種編譯語言。原則上,「* startup *」程序可以是任何可執行文件,無論是shell腳本還是編譯後的c程序。另外,C#如果你的意思是Windows特定的語言,它可以在Linux AFAIK上工作,但在Linux上看到C#程序並不常見。 –

回答

1

有幾種方法可以讓程序在啓動時運行,它取決於您的init子系統(您使用systemd還是SysV樣式的init?)。

順便說一句,C源程序不是script,你一般編譯它(使用gcc -Wall -Wextra -g)到一些executable。在你的情況下,你可能想要在構建時設置它的rpath(特別是爲了避免LD_LIBRARY_PATH的瘋狂),也許通過傳遞類似-Wl,-rpath,/opt/redpitaya/lib到你的鏈接gcc命令。

也許crontab(5)條目與@reboot可能就足夠了。

無論你開始你在啓動時計劃的方式,一般是其標準輸入標準輸出標準錯誤流重定向(例如到/dev/null,看null(4))或不可用的情況。所以很有可能你的printf輸出無效。您可能會在腳本中重定向標準輸出,我建議在您的C程序中使用syslog(3),並在您的shell腳本中使用logger(1)(然後查看/var/log/下的一些*.log文件)。順便說一句,它的環境與一些交互式shell(見environ(7) ...)不一樣(因爲LD_LIBRARY_PATH可能沒有設置爲你想要的值),所以你的程序可能很早就失效了(可能在動態鏈接時,請參見ld-linux.so(8))成爲...)。

你應該考慮在你的C程序中處理程序參數(可能與getopt_long(3)),也許可能有一些選項(例如--daemonize),它可以調用daemon(3)

您當然應該閱讀Advanced Linux Programming或類似的東西。

我推薦首先能夠成功構建,然後在啓動時使用syslog(3)運行一些「hello-world」程序。之後,你可以改進這個計劃,讓它適合你的Red Pitaya的事情。

相關問題