int f = open("/dev/plcm_drv", O_RDWR); printf("%x\n", ioctl(f, 0xC, 0) ); #### sysopen(DEVICE, "/dev/plcm_drv", O_RDWR); print sprintf("%x", ioctl(DEVICE, 0xC, 0)) . "\n"; #### Working (C, ioctl 0xC): open("/dev/plcm_drv", O_RDWR) = 3 ioctl(3, 0xc, 0) = 142 Working (Perl, ioctl 1): open("/dev/plcm_drv", O_RDWR|O_LARGEFILE) = 3 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xff86b540) = -1 EOPNOTSUPP (Operation not supported) _llseek(3, 0, [0], SEEK_CUR) = 0 fstat64(3, {st_mode=S_IFCHR|0644, st_rdev=makedev(241, 0), ...}) = 0 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 ioctl(3, FIBMAP, 0) = 0 close(3) = 0 Not Working (Perl, ioctl 0xC): open("/dev/plcm_drv", O_RDWR|O_LARGEFILE) = 3 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xffe34310) = -1 EOPNOTSUPP (Operation not supported) _llseek(3, 0, [0], SEEK_CUR) = 0 fstat64(3, {st_mode=S_IFCHR|0644, st_rdev=makedev(241, 0), ...}) = 0 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 ioctl(3, 0xc, 0) = -1 EINVAL (Invalid argument) close(3) = 0