Daemon Programming in Raspberry Pi

Daemon Programming in Raspberry Pi

Daemon programming in Raspberry Pi Jaakko Koivuniemi CERN/PH April 11, 2014 Abstract command line interface, what is a daemon?, typical daemon structure Raspberry Pi at CERN Jaakko Koivuniemi April 12, 2014 Command line interface and C • used in computers long before graphical user interface • usually enough for servers that do not need friendly user interface • can be efficient over slow network connection • in linux most important operations can always be done from CLI • allows shell scripting and programming • rapid developement of working programs Raspberry Pi at CERN 1 Jaakko Koivuniemi April 12, 2014 C get options 1 #include <s t d i o . h> #include <s t d l i b . h> 3 #include <g e t o p t . h> 5 v o i d printusage() f 7 p r i n t f ("usage: numbers[ −nN][ −h] n n"); g 9 i n t main(int argc, char ∗∗ argv ) 11 f i n t count=0; 13 i n t optch=0; 15 w h i l e(optch!= −1) f 17 optch=getopt(argc ,argv ,"n:h"); i f (optch=='h') Raspberry Pi at CERN 2 Jaakko Koivuniemi April 12, 2014 19 f printusage(); 21 r e t u r n 0; g 23 i f (optch=='n') f 25 count=atoi(optarg); g 27 g 29 i n t i=0; 31 f o r(i=0;i <count ; i ++) f 33 p r i n t f ("%dnn",i); g 35 r e t u r n 0; 37 g Raspberry Pi at CERN 3 Jaakko Koivuniemi April 12, 2014 Compile and test 1 pi@raspberrypi ~ $ gcc −g −O −Wall numbers.c −o numbers pi@raspberrypi ~ $ numbers −n 3 3 0 1 5 2 Raspberry Pi at CERN 4 Jaakko Koivuniemi April 12, 2014 What is a daemon? • general service run in background • examples: atd, crond, httpd, ifplugd, ntpd, sshd, udevd 1 pi@raspberrypi ~ $ service −−s t a t u s−a l l pi@raspberrypi ~ $ service ifplugd help 3 pi@raspberrypi ~ $ service ifplugd status pi@raspberrypi ~ $ sudo service ifplugd stop Raspberry Pi at CERN 5 Jaakko Koivuniemi April 12, 2014 Writing a daemon program • can read a configuration file from /etc/mydaemon conf • writes a log file to /var/log/mydaemon.log, verbose level can be set from configuration file • logrotate(8) can be used to rotate/compress log file • typically /var/lib/mydaemon/ has the live data • /var/run/mydaemon.pid process number • daemon needs to catch signals like SIGHUP, SIGTERM Raspberry Pi at CERN 6 Jaakko Koivuniemi April 12, 2014 • can be started and stopped manually with service mydaemon start/stop • can be started or stopped by the system at different run levels • can be written in C/C++ or as Perl/Python script, the first typically for mature projects and latter for fast developement with modern data structures Raspberry Pi at CERN 7 Jaakko Koivuniemi April 12, 2014 Example: temperature logging • temperature from tmp102 read with I2C bus • data written to a log file /var/log/tmp102d.log v o i d logmessage(const char logfile[200], const char message[200], int l o g l e v , int msglev) fg 2 i n t read d a t a (int address, int length) f r e t u r n0 g 4 v o i d read temp ( ) fg 6 i n t cont=1;/ ∗ main loop flag ∗/ 8 v o i d stop(int sig) 10 f Raspberry Pi at CERN 8 Jaakko Koivuniemi April 12, 2014 sprintf(message ,"signal%d catched, stop",sig); 12 logmessage(logfile ,message,loglev ,4); cont =0; 14 g 16 i n t main() f 18 sprintf(message ,"tmp102dv.%d started",version); logmessage(logfile ,message,loglev ,4); 20 signal (SIGTERM,&stop) ; 22 w h i l e ( cont==1) 24 f read temp ( ) ; 26 s l e e p (60) ; g 28 r e t u r n 0; 30 g Raspberry Pi at CERN 9 Jaakko Koivuniemi April 12, 2014 Daemonization • fork off the parent process and let it terminate • setsid - create a new session • catch signals • chdir - change the working directory of the daemon. • umask - change the file mode mask according to the needs of the daemon • close - close all open file descriptors that may be inherited from the parent process Raspberry Pi at CERN 10 Jaakko Koivuniemi April 12, 2014 Automatic start at boot time • shell script at /etc/init.d/tmp102d 1 pi@raspberrypi ~ $ sudo update−rc.d tmp102d defaults pi@raspberrypi ~ $ sudo service tmp102d start/stop Raspberry Pi at CERN 11 Jaakko Koivuniemi April 12, 2014 References • http://en.wikipedia.org/wiki/Daemon (computing) • http://stackoverflow.com/questions/17954432/creating-a-daemon-in-linux • https://github.com/oh7bf/tmp102 (to be done) Raspberry Pi at CERN 12.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    13 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us