LINUX.ORG.RU

stat(2) & segfault


0

0

собираю (gcc -Wall -g ) код:

struct stat *adstat;
...
if (stat("/etc/at.allow", adstat) != -1)
{
    ...

файл /etc/at.allow cуществует, получаю:

--------------
(gdb) n
207             if (stat("/etc/at.allow", adstat) != -1)
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x400df8cf in __xstat (vers=3, name=0x80492d0 "/etc/at.allow", buf=0x4008fba0)
    at ../sysdeps/unix/sysv/linux/xstatconv.c:159
159     ../sysdeps/unix/sysv/linux/xstatconv.c: No such file or directory.
        in ../sysdeps/unix/sysv/linux/xstatconv.c
(gdb) q
--------------

подскажите в чем может быть трабла. stat(2) рабочий.
система kernel 2.4.21 libc 2.2.5.
anonymous

> struct stat *adstat;
> ...
> if (stat("/etc/at.allow", adstat) != -1)

Память-то кто размещать будет?

struct stat adstat;
...
if(stat("/etc/at.allow", &adstat) != -1)

vnp
()

ты прав. я стормозил, но интересно, что пример:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include <stdio.h>

int
main(int argc, char *argv[])
{
        struct stat *s;

        if (stat(argv[1], s) != -1)
        {
                printf("st_dev=%d\n st_ino=%ld\n st_mode=%d\n st_nlink=%d\n st_u
id=%d\n st_gid=%d\n st_rdev=%d\n st_size=%ld\n st_blksize=%ld\n st_blocks=%ld\n 
st_atime=%ld\n st_mtime=%ld\n st_ctime=%ld\n", s->st_dev, s->st_ino, s->st_mode,
 s->st_nlink, s->st_uid, s->st_gid, s->st_rdev, s->st_size, s->st_blksize, s->st
_blocks, s->st_atime, s->st_mtime, s->st_ctime);
                return 1;
        }
        else
        {
                perror("stat(2)");
                return -1;
        }
}

собирается и работает ;-)))
чудеса!

anonymous
()

значит, когда об"являешь указатель внутри функции, он не вылетает за пределы программы, хотя всяко что-нибудь херит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.