Cannot capture keystrokes in C [Ubuntu 16.04LTS] - c

I've been trying to make a keylogger on Ubuntu 16.04LTS for a while now, and this is what I have so far:
#include <stdio.h>
#include <fcntl.h>
#include <linux/input.h>
#include <stdbool.h>
int main()
{
char devname[] = "/dev/input/event0";
int device = open(devname, O_RDONLY);
struct input_event ev;
bool logging = true;
while(logging)
{
if (read(device,&ev, sizeof(ev)) >= 0){
printf("Key: %i State: %i Type: %i\n",ev.code,ev.value,ev.type);
}
}
}
However when I compile and run it (gcc), it does not output anything!
I've tried every device listed in /dev/input/by-id andthensome,but nothing seems to work.
When I compile the code using GCC, I get the warning:
keylogger.c: In function ‘main’:
keylogger.c:15:7: warning: implicit declaration of function ‘read’ [-Wimplicit-function-declaration]
if (read(device,&ev, sizeof(ev)) >= 0){
^
Which I have no idea if this has to do with the functionality of the program.
Any help is appreciated! Thanks!

I figured it out, it was a simple matter of not having superuser permissions. I excecuted the file using sudo and now everything is fine.

Related

How to Play MP3 Files in C code using FMOD?

I'm trying to play a simple file in my c code and so I looked up how to do it on Stack Overflow, but when I tried to apply the answer, which was to download FMOD and use it, I got an error.
The code was:
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <inc/fmod.h>
FSOUND_SAMPLE* handle;
int main()
{
// init FMOD sound system
FSOUND_Init (44100, 32, 0);
// load and play mp3
handle=FSOUND_Sample_Load (0,"mp3.file",0, 0, 0);
FSOUND_PlaySound (0,handle);
// wait until the users hits a key to end the app
while (!_kbhit())
{
}
// clean up
FSOUND_Sample_Free (handle);
FSOUND_Close();
}
but the error told me that:
"gcc -Wall -c "Cases.c" (in directory: C:\Users\xeobi\Documents\C Files)
Cases.c:5:10: fatal error: inc/fmod.h: No such file or directory
5 | #include <inc/fmod.h>
| ^~~~~~~~~~~~
compilation terminated.
Compilation failed."

How to play sound effect or Music in C?

I am making a game and I have to add some sounds effects and Music.
I Googled it and I found The flowing Code:
#include <conio.h>
#include "inc/fmod.h"
FSOUND_SAMPLE* handle;
int main ()
{
// init FMOD sound system
FSOUND_Init (44100, 32, 0);
// load and play mp3
handle=FSOUND_Sample_Load (0,"my.mp3",0, 0, 0);
FSOUND_PlaySound (0,handle);
// wait until the users hits a key to end the app
while (!_kbhit())
{
}
// clean up
FSOUND_Sample_Free (handle);
FSOUND_Close();
}
But when I compile it I got the flowing error:
➜ Desktop gcc main.c
main.c:1:10: fatal error: 'conio.h' file not found
#include <conio.h>
^~~~~~~~~
1 error generated.
Well, firstly <conio.h> is a C++ library and you're programming in C. It's different!
Then, I remember a C code I wrote years ago, main.c has got the following code (comments are in italian because I am italian):
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "header.h"
int main(){
register unsigned char x='2';
printf("digitare tasti:\n");
while(1){
while(1){
if(x=='2'){/*blocco2*/ while(x!='1' && x!='3'){x=getch(); scala2(x);}}
if(x=='1'){/*blocco1*/ while(x!='2' && x!='3'){x=getch(); scala1(x);}}
if(x=='3'){/*blocco3*/ while(x!='1' && x!='2'){x=getch(); scala3(x);}}
}
}
system("PAUSE");
return 0;
}
Then, this is the other source file, called file.c:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "header.h"
void scala1(unsigned char x){
if(x=='a')beep(131,50);
if(x=='s')beep(147,50);
if(x=='d')beep(165,50);
if(x=='f')beep(175,50);
if(x=='g')beep(196,50);
if(x=='h')beep(220,50);
if(x=='j')beep(247,50);
if(x=='k')beep(262,50);
if(x=='l')beep(294,50);
if(x=='w')beep(139,50);
if(x=='e')beep(156,50);
if(x=='r')beep(185,50);
if(x=='t')beep(208,50);
if(x=='y')beep(233,50);
}
void scala2(unsigned char x){
if(x=='a')beep(262,50);
if(x=='s')beep(294,50);
if(x=='d')beep(330,50);
if(x=='f')beep(349,50);
if(x=='g')beep(392,50);
if(x=='h')beep(440,50);
if(x=='j')beep(494,50);
if(x=='k')beep(523,50);
if(x=='l')beep(587,50);
if(x=='w')beep(277,50);
if(x=='e')beep(311,50);
if(x=='r')beep(370,50);
if(x=='t')beep(415,50);
if(x=='y')beep(466,50);
}
void scala3(unsigned char x){
if(x=='a')beep(523,50);
if(x=='s')beep(587,50);
if(x=='d')beep(659,50);
if(x=='f')beep(698,50);
if(x=='g')beep(784,50);
if(x=='h')beep(880,50);
if(x=='j')beep(988,50);
if(x=='k')beep(1046,50);
if(x=='l')beep(1175,50);
if(x=='w')beep(554,50);
if(x=='e')beep(622,50);
if(x=='r')beep(740,50);
if(x=='t')beep(831,50);
if(x=='y')beep(932,50);
}
The last one, the file header.h. It's code is the following one:
void scala1(unsigned char x);
void scala2(unsigned char x);
void scala3(unsigned char x);
All the source files must be in the same directory. You compile main.c and then, you just need to press a,s,d,..y and 1,2,3. Try! It works, of course if you want to change part of the code, you can do. I hope you enjoy my program, it's funny :)

error: implicit declaration of function 'sysconf'

Following this question, I'm trying to use sysconf to get the number of processors on a Linux machine:
#include <unistd.h>
int main()
{
...
int CPUs = sysconf(_SC_NPROCESSORS_ONLN);
...
}
However, the compiler gives me this error:
error: implicit declaration of function 'sysconf'
Am I doing something wrong? I tried to also add #include <sys/sysinfo.h> but nothing changed.

_chsize raises assertation error on visual studio 2017

#include <stdio.h>
#include <stdlib.h>
...
int function () {
FILE *f;
f = fopen("list.txt", "rb+");
...
int value;
if (_chsize_s(f, value) == 0) return 1;
}
For some reason, the above snippet of code, when run in MS Visual Studio, generates an error at the _chsize_s() function. The following message pops up:
Debug Assertation Failed!
Expression: (fh >= 0 && (unsigned)fh < (unsigned)_nhandle)
I have no idea what to make of this, much less how to fix it. Any help would be much appreciated.
You are ignoring the compiler's warnings or have them disabled. In order to fix the implicit declaration warning, you must include the header for _chsize_s:
#include <io.h>
This will fix the implicit declaration warning, and uncover the error, that _chsize_s is being called with the wrong type. The correct way to call it is:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
...
int function(void) {
FILE *f;
f = fopen("list.txt", "rb+");
...
int value;
if (_chsize_s(_fileno(f), value) == 0) return 1;
}
This shows how important it is not to ignore compiler warnings (with exceptions... most sane people will define _CRT_SECURE_NO_WARNINGS when writing C with MSVC).

How to specify timezone in linux using C

I was trying to set the timezone of my system, and was trying to use settimeofday(), which takes a timezone struct as an argument, but just read that that struct is now obsolete (http://linux.about.com/library/cmd/blcmdl2_settimeofday.htm) How could I go about doing this?
Thanks in advance.
EDIT: Ugh, I feel really stupid.
I created a link.c and compiled it:
#include <stdio.h>
void main()
{
printf("This is the link \n");
}
Created a target.c, and compiled it:
#include <stdio.h>
void main()
{
printf("This is the target \n");
}
and then tried the symlink function in a test program:
#include <unistd.h>
void main()
{
int garbage = symlink("/home/imandhan/pythonTests/link", "/home/imandhan/pythonTests/target");
printf(garbage);
}
This gives me a segmentation fault for some reason. Am I doing something wrong?
See tzset(3) for setting timezone for an application.
For the whole system - symlink /etc/localtime to appropriate file under /usr/share/zoneinfo/.

Resources