Sponsored Content
Top Forums Programming fcntl works in linux but not in mac os x Post 302295174 by newhere on Friday 6th of March 2009 07:40:07 PM
Old 03-06-2009
fcntl works in linux but not in mac os x

Hi,

Unless I am missing some serious differences in Mac and linux in terms of C programming, I dont know why this would happen. Please take a look at the following piece of code fragment:

Code:
bool add_input_to_db(Cons *new_data) {
  // Set the attributes of the lock 	
  struct flock fl = {F_WRLCK, SEEK_SET, 0, 0, 0};	 
  int fd = open(LOGFILE, O_APPEND | O_SYNC | O_CREAT | O_WRONLY, 0600);
  if (fd == -1) {
    perror(LOGFILE);
    return false;
  }
  // Get our PID
  fl.l_pid = getpid();
  // Return false on error
  if (fcntl(fd, F_SETLKW, &fl) < 0){
     perror("fcntl");
     return false;
  }
  FILE *database = fdopen(fd, "a");
  int result = write_questions(new_data, database, false);
  // Set to unlock before closing the file
  fl.l_type = F_UNLCK;
  if (fcntl(fd, F_SETLK, &fl) < 0){
     perror("fcntl");
     return false;
  }
  fclose(database);
  return (bool) result;
}

This function is part of a bigger programs that takes in user input and logs it into a file. As you might see, I am trying to get an write lock on the logfile as soon as it opens and release the lock before the file is closed. When I run it on linux (ubuntu hardy), the program runs without any problems. However, when I run it on my mac (Leopard), I get:
Code:
fcntl: Invalid argument

If someone could explain why this would be, it'd be helpful.

Thanks.
 

10 More Discussions You Might Find Interesting

1. Programming

I have no clue what's the point - fcntl() ?

hi, I need to know how to lock a file. I used the following code, but after executing the program the file 'write.txt' remined empty, and I have no idea why.Maybe I'm not using the corresponding syntax for blocking a file. But I deleted then the blocking part and the problem persisted. see to... (2 Replies)
Discussion started by: atticus
2 Replies

2. Shell Programming and Scripting

Script works on Solaris, not on Linux

I'm in the same boat as Barbus - same exercis (https://www.unix.com/shell-programming-scripting/43609-processes-users.html) The following script works on a solaris server I have access to. It doesn't however, work on the companies Linux machine. Any idea what's up? I have very little shell... (0 Replies)
Discussion started by: Silverhood
0 Replies

3. Programming

fcntl on socket

I have very simple client - server setup, where client connects, exchanges some messages with the server and then closes socket and exits. Everythink works OK, except when I am trying to change socket to be non-blocking AND the shell happens to be plain old Bourne. It runs no problem under ksh or... (3 Replies)
Discussion started by: migurus
3 Replies

4. Shell Programming and Scripting

awk -F works on Linux, but not on Solaris

Hello, I found this command works on Linux: $ echo `uptime` | awk -F "load average: " '{ print $2 }' 1.60, 1.53, 1.46 but got error on Solaris: $ echo `uptime` | awk -F "load average: " '{ print $2 }' awk: syntax error near line 1 awk: bailing out near line 1 $ which awk... (2 Replies)
Discussion started by: seafan
2 Replies

5. Shell Programming and Scripting

File Locking with fcntl on Darwin Mac OSX

Hello I have a Perl script that works on non-darwin Mac OS X environments and I think I have narrowed down the issue to a file locking problem. In other linux environments, the flock struct is defined differently. I have adjusted this via the reference for Mac OS X fcntl(2) man page. The... (4 Replies)
Discussion started by: flagman5
4 Replies

6. Shell Programming and Scripting

sed command works on Fedora/Ubuntu, but doesn't work in Mac

Hi, I have a question. I define a function using sed command: replace() { searchterm=$1 replaceterm=$2 sed -e "s/$searchterm/$replaceterm/ig" $3 > $WORK'tempfile.tmp' mv $WORK'tempfile.tmp' $3 } Then I call replace 'test = 0' 'test = 1' $myfileThis code works well in... (1 Reply)
Discussion started by: Dark2Bright
1 Replies

7. Shell Programming and Scripting

sed command works on Fedora/Ubuntu, but doesn't work in Mac

Hi, I have a question. I define a function using sed command: replace() { searchterm=$1 replaceterm=$2 sed -e "s/$searchterm/$replaceterm/ig" $3 > $WORK'tempfile.tmp' mv $WORK'tempfile.tmp' $3 } Then I call replace 'test = 0' 'test = 1' $myfile This code... (1 Reply)
Discussion started by: Dark2Bright
1 Replies

8. Linux

Block with fcntl

Good evening, friends I'm learning with a book: Programming Linux by Kurt Wall (Prentice Hall) The code below could run in two windows (./lockit /tmp/foo in both for example). There is not problem with the read block (first byte) but when one, apply the write block while in the other is... (1 Reply)
Discussion started by: joe_cosmo
1 Replies

9. Shell Programming and Scripting

Why statement works in LINUX and not UNIX?

Hello, I have a ksh script that uses code below. For some reason it works under linux but fails in unix. Any idea why? if ]; then ... Thanks (9 Replies)
Discussion started by: rdogadin
9 Replies

10. Hardware

Does this hardware works with Linux

Hello folks, I pretend acquire this hardware: 1-Motherboard Asus Skt1151 - H110M-A/M.2 (https://www.asus.com/pt/Motherboards...cifications/); 2-Intel i5 6400 2.7Ghz QuadCore Skt1151; or 2-Intel i5 6500 3.2Ghz QuadCore Skt1151; 3-Dimm 8GB DDR4 Kingston CL15 2133Mhz; Obvious I pretend... (1 Reply)
Discussion started by: enodev
1 Replies
UUID_COMPARE(3) 						    Libuuid API 						   UUID_COMPARE(3)

NAME
uuid_compare - compare whether two UUIDs are the same SYNOPSIS
#include <uuid/uuid.h> int uuid_compare(uuid_t uu1, uuid_t uu2) DESCRIPTION
The uuid_compare function compares the two supplied uuid variables uu1 and uu2 to each other. RETURN VALUE
Returns an integer less than, equal to, or greater than zero if uu1 is found, respectively, to be lexigraphically less than, equal, or greater than uu2. AUTHOR
Theodore Y. Ts'o AVAILABILITY
libuuid is part of the util-linux package since version 2.15.1 and is available from ftp://ftp.kernel.org/pub/linux/utils/util-linux/. SEE ALSO
uuid(3), uuid_clear(3), uuid_copy(3), uuid_generate(3), uuid_is_null(3), uuid_parse(3), uuid_unparse(3) util-linux May 2009 UUID_COMPARE(3)
All times are GMT -4. The time now is 03:07 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy