I ran in a problem with error message on openindiana:

fcntl: Invalid argument

I wrot short test program:

#include <sys/file.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main() {
 struct flock64 l;
 FILE *fp;

 l.l_whence = SEEK_SET;
 l.l_start = 0;
 l.l_len = 0;
 l.l_sysid = 0;
 l.l_pid = 0;

 fp = fopen("flocktest.c", "r");
 if (fp == NULL) {
 l.l_type = F_UNLCK;
 if (fcntl(fileno(fp), F_FLOCK, &l) != 0) {
 printf("flocktest.c locked\n");
 return 0;

This compiles on Openindiana without an error, but if it runs throws the error: 
Invalid argument (os error 22)

If I copy this on Openindiana compiled code to Smartos it runs correctly.

OI illumos version:
SunOS oi-sr 5.11 illumos-2ee1ed1ec5 i86pc i386 i86pc
Which is:
git show 2ee1ed1ec5
commit 2ee1ed1ec5dfdf07d2c92db58b11f630de2a6e87
Author: Dan McDonald <dan...@joyent.com>
Date: Tue Sep 12 17:38:28 2017 -0400

Smartos illumos version:
SunOS smartos 5.11 joyent_20171026T003127Z i86pc i386 i86pc

The libc shows on both the same versions:

$ elfdump -v /lib/libc.so.1

Version Definition Section: .SUNW_version
 index version dependency
 [1] libc.so.1 [ BASE ]
 [2] ILLUMOS_0.24 ILLUMOS_0.23 
 [3] ILLUMOS_0.23 ILLUMOS_0.22 

The error message points out that the problem is in kernel.

How can I get running the fcntl flock code on Openindiana? 
The kernel builds seems to be nearly the same, but not exactly. The F_FLOCK 
stuff was added much earlier.

oi-dev mailing list

Reply via email to