The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Wrapping Your Brain Around Oracle + Python iBot Oracle Updates (RSS) 0 04-06-2008 02:10 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1  
Old 05-09-2007
Registered User
 

Join Date: Feb 2005
Posts: 5
C Brain Teaser

Dear Gurus,
I have encountered a C question, which I thought of sharing with you.
This question was asked by one of my technical training staff...Though my training was over I'm still thinking of a solution for this..

Write a C program to do a small task(lets say just simply printing a "Hello World" or so) such that the program should only give output or the desired result ony once after it got compiled and should never give the output nor do anything else. The program should not make use of files or any extrnal means of storing some data.

Please suggest me some ways of achieving this...

Regards
RK
Reply With Quote
Forum Sponsor
  #2  
Old 05-09-2007
vino's Avatar
Supporter (in vino veritas)
 

Join Date: Feb 2005
Location: Bangalore, India
Posts: 2,683
Quote:
Originally Posted by vrk1219

Write a C program to do a small task(lets say just simply printing a "Hello World" or so) such that the program should only give output or the desired result ony once after it got compiled and should never give the output nor do anything else. The program should not make use of files or any extrnal means of storing some data.
You did not place any restrictions on what not to do. One way could be to remove yourself after the program execution.
Code:
[/tmp]$ cat try.cpp
#include <stdio.h>
#include <unistd.h>

int main (int argc, char* argv[])
{
    printf ("Bye Bye Cruel World :-( \n");
    return (unlink (argv[0]));
}
[/tmp]$ gcc -o try try.cpp -lstdc++
[/tmp]$ ls -l try
-rwxr-xr-x  1 xxxxxx g900 5202 May  9 02:51 try
[/tmp]$ ./try
Bye Bye Cruel World :-( 
[/tmp]$ ls -l try
ls: try: No such file or directory
[/tmp]$
Reply With Quote
  #3  
Old 05-09-2007
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,616
Astounding that that works, vino! Looking at the Linux man page for unlink(2), I see that it does not detect "text busy". Compare that to the HP-UX man page for unlink(2). The Linux unlink(2) is rather permissive. If that man page is right, it even allows unlinking an active mount point! I'm not sure what effect that would have... Posix does not require that unlink(2) disallow unlinking mount points (but the text in the standard makes it clear that this is because Posix does not ever mention mount points). But unlinking an active program is another matter. On one hand, the Posix Standard says:
Quote:
The unlink() function shall fail and shall not unlink the file if:
...
[ETXTBSY] The entry to be unlinked is the last link to a pure procedure (shared text) file that is being executed.
That sounds to me like an OS is required to disallow the operation. But toward the end of the page we have:
Quote:
The [ETXTBSY] optional error condition is added.
This leaves me confused as to whether or not the operation is allowed by Posix. But it will not work on most implementations of Unix. I would be interested if this program works with any kernel other than Linux.

A more portable solution would be have the program to write a little shell script to unlink the file and then exec that shell script.
Reply With Quote
  #4  
Old 05-09-2007
sysgate's Avatar
Unix based
 

Join Date: Nov 2006
Location: /root
Posts: 1,197
I just tested on Solaris 10, t1000 server, seems to be working :
Quote:
[root@t1000-2 home]# gcc -o try try.cpp -lstdc++
[root@t1000-2 home]# ./try
Bye Bye Cruel World :-(
[root@t1000-2 home]# ls -l try
try: No such file or directory
Reply With Quote
  #5  
Old 05-09-2007
...@...
 

Join Date: Feb 2004
Location: NM
Posts: 4,274
Does not work on HPUX 11i, as expected.
Reply With Quote
  #6  
Old 05-09-2007
Technorati Master
 

Join Date: Mar 2005
Location: Large scale systems...
Posts: 2,610
it works on RHEL3 !
Reply With Quote
  #7  
Old 05-10-2007
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,616
Quote:
Originally Posted by matrixmadhan
it works on RHEL3 !
It will work on any OS using a Linux kernel. This includes Red Hat. It is interesting that it works on Solaris though. I have always thought that ETXTBSY was silly. Of course you can't a program while it is running. But there is no reason to prohibit the unlink. The file will have zero links but will not be deleted until the reference count is also zero. This is the way data files have always been handled in Unix.
Reply With Quote
Google The UNIX and Linux Forums
Reply

Tags
linux

Thread Tools
Display Modes




All times are GMT -7. The time now is 07:17 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0