?
Solved

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

Posted on 1998-05-22
4
Medium Priority
?
160 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 100 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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

This tutorial will discuss the log-in process using WhizBase. In this article I assume you already know HTML. I will write the code using WhizBase Server Pages, so you need to know some basics in WBSP (you might look at some of my other articles abo…
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.
Suggested Courses

649 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