Solved

PROCESS ID and LOCKING a file...In C??

Posted on 1998-05-22
4
153 Views
Last Modified: 2013-12-25
I have used Perl for some time now allowing my C skills to wither away.  Perl has given me options like
getting the presently launched perl program's process id with the constant variable $$.  This gives me a unique number which I can identify this launched program as (unique from the many that can be launched at one time on a multitasking OS).  Perl also allows me to use a command called FLOCK which will lock a file from being written over by someone else giving exclusive rights to whoever.  

Those commands are great but I need them for C. I am translating my Perl code and really need to know how to get the PROCESS ID for my launched compiled C program. I also need to LOCK a file so that the launched program can have exclusive rights to a file.  And all this in ANSI-C because I want it to work on any platform (Unix/NT) that I compile it for.  

Can you please help me identify these commands in ANSI-C?  Or possibly give me alternative methods to use.  Thank you VERY much!!
0
Comment
Question by:ljaques
4 Comments
 
LVL 5

Expert Comment

by:julio011597
ID: 1828848
There isn't an *ANSI-C* way to do the job. That is, you need OS dependent code.
To make your code portable, try to use compiler conditionals.

HTH, julio
0
 
LVL 2

Expert Comment

by:WileyKat
ID: 1828849
I agree with julio. You need OS-dependant code. What OS are you going to run the code on?
0
 
LVL 8

Accepted Solution

by:
jhurst earned 50 total points
ID: 1828850
They are right that there is no specific call in ANSI-C however there is a sort of kludge way of getting something uique, actually a PID.  WHat you do is use fork() which as you will find in the manual makes a second copy of the running process and returns the pid to one cope and 0 to the other.  Just have the copy that gets a pid back use this number.  It is a real pid so it gives you what you want.

The lock is more of a problem.  The way that I have always handled this is to make a lock file with the pid when I start and have it removed by the atexit().  Then I just check that there are no other ones there when I start.
0
 
LVL 84

Expert Comment

by:ozo
ID: 1828851
getpid is POSIX standard, and should be at least as portable as fork.

The lock file method suggested above can be tricky.
What if another process makes a lock file right after you check that there are no other ones there, and before you make yours?

I'd suggest looking at the perl flock code to see how they emulate it on various different platforms.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This tutorial will discuss fancy secure registration forms, with AJAX technology support. In this article I assume you already know HTML and some JS. I will write the code using WhizBase Server Pages, so you need to know some basics in WBSP (you mig…
Recently I have been answering a lot of questions like this in IT forums that I frequent. The question posed is usually something along the lines of "We have software X installed and need to uninstall it for reason Y" or some other variant of the sa…
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
The viewer will learn how to count occurrences of each item in an array.

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now