• [^] # Re: C

    Posté par . En réponse au journal C. Évalué à 1.

    printf("prout2\n"); /* marche pas */
    close(STDOUT_FILENO); /* amusant :


    le strace donne :
    close(1) = 0
    write(1, "prout2\n", 7) = -1 EBADF (Bad file descriptor)

    c'est marrant (l'assembleur est bon) et si on met un sleep apres le printf, ca change rien (l'attente se fait avant le close)

    Par contre chez moi le prout est ecrit dans le fichier plouf....

    PS le strace complet

    execve("./a.out", ["./a.out"], [/* 30 vars */]) = 0
    uname({sys="Linux", node="mat-pc", ...}) = 0
    brk(0) = 0x804a000
    old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.cache", O_RDONLY) = 3
    fstat64(3, {st_mode=S_IFREG|0644, st_size=46963, ...}) = 0
    old_mmap(NULL, 46963, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/tls/libc.so.6", O_RDONLY) = 3
    read(3, "177円ELF1円1円1円0円0円0円0円0円0円0円0円0円3円0円3円0円1円0円0円0円240円X1円"..., 512) = 512
    fstat64(3, {st_mode=S_IFREG|0644, st_size=1271388, ...}) = 0
    old_mmap(NULL, 1281772, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40024000
    old_mmap(0x40152000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x12d000) = 0x40152000
    old_mmap(0x4015b000, 7916, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015b000
    close(3) = 0
    old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4015d000
    set_thread_area({entry_number:-1 -> 6, base_addr:0x4015d2a0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
    munmap(0x40018000, 46963) = 0
    open("plouf", O_WRONLY|O_CREAT|O_TRUNC, 010000713231) = 3
    close(1) = 0
    dup2(3, 1) = 1
    close(3) = 0
    write(1, "prout\n", 6) = 6
    fstat64(1, {st_mode=S_IFREG|S_ISVTX|0611, st_size=6, ...}) = 0
    mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000
    close(1) = 0
    write(1, "prout2\n", 7) = -1 EBADF (Bad file descriptor)
    munmap(0x40018000, 4096) = 0
    exit_group(0)