Solved

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

Posted on 1998-05-22
4
156 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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Access Control Entries lost in Windows folders 3 57
Control Number of Log Files -Perl 7 87
Bulk Reorder File Names 4 69
Awk : two files math 8 20
In this tutorial I will focus on how to use WhizBase as a tool for sending ICQ messages to ICQ. Here I will use a new technology in WhizBase, published in WhizBase 5.1 version. In this tutorial I will use 3 files, pager.wbsp for the processing, e…
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

861 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