Skip to content
Advertisement

error in clone system call sentence in c++

I am trying to to run c code in c++ which uses clone inside , I got an error which I couldn’t solve it , anyone used clone in c++ before , and can help .

my code:

int variable, fd;
using namespace std ;
int do_something() {
variable = 42;cout << "sana" << endl ;
close(fd);
_exit(0);
}

int main() {
void **child_stack;
char tempch;

variable = 9;
fd = open("test.file", O_RDONLY);
child_stack = (void **) malloc(16384);
printf("The variable was %dn", variable);

clone(do_something, child_stack,CLONE_VM|CLONE_FILES, NULL);
sleep(1);

printf("The variable is now %dn", variable);
if (read(fd, &tempch, 1) < 1) {
  perror("File Read Error");
  exit(1);
}
printf("We could read from the filen");
return 0;
}

and i got the errors:

dell@ubuntu:~$ g++ n.cpp -o n n.cpp: In function ‘int main()’: n.cpp:40:62: error: invalid conversion from ‘int ()()’ to ‘int ()(void*)’ [-fpermissive] /usr/include/x86_64-linux-gnu/bits/sched.h:83:12: error: initializing argument 1 of ‘int clone(int ()(void), void*, int, void*, …)’ [-fpermissive] dell@ubuntu:~$

Advertisement

Answer

Compiler is telling you that first argument to clone is supposed to be int(*)(void*) (a pointer to function taking one void* parameter and returning int) and that you’re trying to pass it int(*)() (a pointer to function taking no parameters and returning int).

The former can’t be implicitly converted to the latter, hence the error.

To fix it, you can define do_something as:

int do_something(void*)
{
    // your code
}
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement