Ada daemon

This is a discussion on Ada daemon within the ADA forums in Programming Languages category; Hey group, My good friend Dwight and I are wondering about how to create a daemon in Ada. So far we've only been able to locate this example: http://www.pegasoft.ca/resources/boblap/16.html#16.26 which honestly looks both hideous and unpleasant, to us. Yes, it might be because we're just a bunch of beginners, but still we were hoping for a "prettier", more Ada like approach. This one seems to rely on a lot of pragma import C stuff. So, is this the only way to create a simple daemon, or can you point us in other directions? -- /Thomas Løcke -- The major difference ...

Go Back   Application Development Forum > Programming Languages > ADA

Object Mix

Register FAQ Calendar Search Today's Posts Mark Forums Read
  #1  
Old 07-25-2008, 04:35 PM
Thomas
Guest
 
Default Ada daemon

Hey group,

My good friend Dwight and I are wondering about how to create a daemon
in Ada. So far we've only been able to locate this example:

http://www.pegasoft.ca/resources/boblap/16.html#16.26

which honestly looks both hideous and unpleasant, to us. Yes, it might
be because we're just a bunch of beginners, but still we were hoping for
a "prettier", more Ada like approach. This one seems to rely on a lot of
pragma import C stuff.

So, is this the only way to create a simple daemon, or can you point us
in other directions?

--
/Thomas Løcke

-- The major difference between a thing that might go wrong
-- and a thing that cannot possibly go wrong is that when a
-- thing that cannot possibly go wrong goes wrong it usually
-- turns out to be impossible to get at or repair.
Reply With Quote
  #2  
Old 07-25-2008, 07:14 PM
anon
Guest
 
Default Re: Ada daemon

Yes, it can hideous and unpleasant if you just use Gnat.Sockets and its
children only. Just take any Client/Server written in C and do a line to
line converting to the Ada corresponding routine.

Now, if you really want to get hurt and do it the GNAT Ada way. Try using
Cobra, in the Polyorb PCS package. And for a just simple messaging try the
MOM, or SOAP sub-system, also include in the Polyorb package.

Also, Polyorb does have examples that work for all protocols.

Now, you can find Polyorb source package on "libre.adacore.com" download
page. Just download, unpack and build the PCS system.


In <488a3916$0$15889$edfadb0f@dtext01.news.tele.dk> , Thomas <me@pancon.dk> writes:
>Hey group,
>
>My good friend Dwight and I are wondering about how to create a daemon
>in Ada. So far we've only been able to locate this example:
>
>http://www.pegasoft.ca/resources/boblap/16.html#16.26
>
>which honestly looks both hideous and unpleasant, to us. Yes, it might
>be because we're just a bunch of beginners, but still we were hoping for
>a "prettier", more Ada like approach. This one seems to rely on a lot of
>pragma import C stuff.
>
>So, is this the only way to create a simple daemon, or can you point us
>in other directions?
>
>--
>/Thomas Løcke
>
>-- The major difference between a thing that might go wrong
>-- and a thing that cannot possibly go wrong is that when a
>-- thing that cannot possibly go wrong goes wrong it usually
>-- turns out to be impossible to get at or repair.


Reply With Quote
  #3  
Old 07-29-2008, 05:05 AM
Jacob Sparre Andersen
Guest
 
Default Re: Ada daemon

Thomas wrote:

> My good friend Dwight and I are wondering about how to create a daemon
> in Ada. So far we've only been able to locate this example:
>
> http://www.pegasoft.ca/resources/boblap/16.html#16.26
>
> which honestly looks both hideous and unpleasant, to us.


Systems programming isn't always beautiful. The trick is to notice
that almost all the code you see is actually a reusable library.
Also, several of the subprograms in the library do actually exist in
the POSIX packages, so there's no need to manually bind to the C
versions of the subprograms.

In practice the important part of daemonizing a process is to
disconnect Standard_Input, Standard_Output and Standard_Error. You
can do this with:

POSIX.IO.Close (File => POSIX.IO.Standard_Input);
POSIX.IO.Close (File => POSIX.IO.Standard_Output);
POSIX.IO.Close (File => POSIX.IO.Standard_Error);

> Yes, it might
> be because we're just a bunch of beginners, but still we were hoping for
> a "prettier", more Ada like approach. This one seems to rely on a lot of
> pragma import C stuff.


Using the POSIX standard packages definitely makes it prettier.

> So, is this the only way to create a simple daemon, or can you point us
> in other directions?


Here's an (untested) implementation of Daemonize using "pure" Ada:

with
POSIX.IO,
POSIX.Process_Environment,
POSIX.Process_Identification,
POSIX.Unsafe_Process_Primitives;

procedure Daemonize is
begin
POSIX.Process_Environment.Change_Working_Directory ("/");

for File in POSIX.IO.File_Descriptor'Range loop
if POSIX.IO.Is_Open (File) then
POSIX.IO.Close (File);
end if;
end loop;

case POSIX.Unsafe_Process_Primitives.Fork is
when -1 =>
POSIX.Process_Primitives.Exit_Process
(POSIX.Process_Primitives.Failed_Creation_Exit);
when 0 =>
declare
Session_Leader :
POSIX.Process_Identification.Process_Group_ID;
begin
POSIX.Process_Identification.Create_Session
(Session_Leader);
end;
when others =>
POSIX.Process_Primitives.Exit_Process;
end case;
end Daemonize;

On Debian you need to install the package "libflorist-dev", to have
access to the POSIX packages.

/Jacob
Reply With Quote
  #4  
Old 07-29-2008, 05:29 AM
Thomas Locke
Guest
 
Default Re: Ada daemon

Jacob Sparre Andersen wrote:
> Here's an (untested) implementation of Daemonize using "pure" Ada:
>
> [snip]



Thank you Jacob!

We will take a closer look at Ada and POSIX. Your implementation looks a
lot more comprehensible.

Regards,
/Thomas
Reply With Quote
Reply


Thread Tools
Display Modes


All times are GMT -5. The time now is 03:42 AM.


Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
vB Ad Management by =RedTyger=

In an effort to better serve ads to our visitors, cookies are used on objectmix.com. For more information, check out our Privacy Policy.