PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, September 14, 2022

[FIXED] What does `exec 200>lockfile` do?

 September 14, 2022     bash, exec     No comments   

Issue

I'm not familiar with the exec command. A bash tutorial about how to lock files throws this:

exec 200>lockfile 
flock 200
...
flock -u 200

I got that it is creating a file named lockfile and assigning it an FD of 200. Then the second command locks that file. When done working with the file, the last command unlocks it.

Doing so, any other concurrent instance of the same script will stay at that second line until the first instance unlocks the file. Cool.

Now, what I don't understand is what is exec doing.

Directly from the bash command line, both options seem to work:

exec 200>lockfile
200>lockfile

But when the second option is used in the script, a "Bad file descriptor error" is raised.

Why is exec needed to avoid the error?

--- edit ---

After some more "serious research", I've found an answer here. The exec command makes the FD stay for the entire script or current shell.

So doing:

200>lockfile flock 200

Would work. But later flock -u 200 would raise a "Bad FD error".


Solution

The manual seems to mention shell replacement with given command. What does that has to do with file descriptors?

This is explained in the second sentence:

exec: exec [-cl] [-a name] file [redirection ...]
    Exec FILE, replacing this shell with the specified program.
    If FILE is not specified, the redirections take effect in this
    shell. [...]

Essentially, doing exec 42> foo.txt from inside myscript.sh opens foo.txt for writing on FD 42 in the current process.

This is similar to running ./myscript.sh 42> foo.txt from a shell in the first place, or using open and dup2 in a C program.



Answered By - that other guy
Answer Checked By - Terry (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing