malloc a struct in kernel header file error :invalid application of 'sizeof' to incomplete type

0

I'm new to linux. I'm practice syscall and I want to copy struct to user.

So I write a syscall which is using copy_to_user().

But When I write and compile test.c to test my syscall appear some error.

in linux/sched.h has defined:

struct pacct_struct {
    int ac_flag;
    long ac_exitcode;
    unsigned long ac_mem;
    cputime_t ac_utime, ac_stime;
    unsigned long ac_minflt, ac_majflt;
};

and then I write a program that use this struct(test.c)

#include "linux/sched.h"
#include <stdlib.h>
int main(){
    struct pacct_struct *ts;
    ts = (struct pacct_struct *)malloc(sizeof(struct pacct_struct));
    return 0;
}

and gcc show the follow error message:

test.c:6:44: error: invalid application of 'sizeof' to incomplete type 'struct pacct_struct'

I wonder to know if it's fine to use kernel struct by include header file. If so, do I miss something? How to make pacct_struct become a 'complete type'?

thanks.

addition:

I check preprocessor with gcc -E

I found that seems no "struct pacct_struct" being included.

Next, I going to view sched.h that I included which was created by "make headers_install" after I compile the kernel.

The file only contains some cloning flags such like "#define CSIGNAL 0x000000ff"

So, I tried to include original source file of sched.h in dir "/usr/src/linux-2.6.39.4/include/linux", but it continue showing same error 'incomplete type'.

Then I check preprocessor again.

I still can't find 'struct pacct_struct' even I include original header file

Anything in sched.h after #ifdef __KERNEL__ is disappear, What happened?

c
linux
linux-kernel
system-calls
asked on Stack Overflow Oct 28, 2018 by Cedric Vincent • edited Oct 29, 2018 by Cedric Vincent

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0