popen / pclose error
6 отговора
236 прегледа
popen / pclose error
Здравейте!
При изпълнение на следния код:
се генерира segmentation fault, когато изпълнимия файл е link-нат като shared. като е статик всичко си върви.
Въпроса ми е дали някой от вас може да ми каже защо става така.
Платформата е Linux, ядро 2.4.8, компилатор GCC 2.96
Предварително благодаря за помоща.
При изпълнение на следния код:
FILE *xxl = popen("/bin/more") ;
int i = 0 ;
for (i = 0 ; i < 100; i++)
{
fprintf(xxl, "blallsdflfsdlfsdfsdfsdfsdf\n") ;
}
pclose(xxl) ;
се генерира segmentation fault, когато изпълнимия файл е link-нат като shared. като е статик всичко си върви.
Въпроса ми е дали някой от вас може да ми каже защо става така.
Платформата е Linux, ядро 2.4.8, компилатор GCC 2.96
Предварително благодаря за помоща.
Re: popen / pclose error
Probvay (edno ot) dve neshta:
1. Pusni go sys strace i porazgleday dumpa.
2. Pusni go prez gdb, i kato poluchi signala i spre, vij kyde e s komandata backtrace.
I dvete obshto vzeto imat edna cel - da vidish kyde se poluchava signalyt. Syvsem ne e zadyljitelno da e v tvoya kod.
Otkriyte greshkite: [линк]
1. Pusni go sys strace i porazgleday dumpa.
2. Pusni go prez gdb, i kato poluchi signala i spre, vij kyde e s komandata backtrace.
I dvete obshto vzeto imat edna cel - da vidish kyde se poluchava signalyt. Syvsem ne e zadyljitelno da e v tvoya kod.
Otkriyte greshkite: [линк]
Re: popen / pclose error
гърми вътре в pclose -> и то като се опитва да деалокира паметта - free().
Re: popen / pclose error
Prekaleno nespecifichno :-)
Proveri dali statichnoto i dinamichnoto libc ne sa ot razlichna versiya na glibc (t.e. razlichni paketi).
Proveri syshto dali .so-to, kym koeto se link-vash buildtime s syshtoto i v runtime. Stava s ldd.
Otkriyte greshkite: [линк]
Proveri dali statichnoto i dinamichnoto libc ne sa ot razlichna versiya na glibc (t.e. razlichni paketi).
Proveri syshto dali .so-to, kym koeto se link-vash buildtime s syshtoto i v runtime. Stava s ldd.
Otkriyte greshkite: [линк]
Re: popen / pclose error
.. още една забавна подробност. същия проблем се появява и на друга инсталация -> с друго gcc и библиотеки. Така че предположението че съм се омазал аз отпада. Като се прибера в къщо ще проверя какво е положението с библиотеките все пак.
Re: popen / pclose error
Ето я и работеща:
#include <stdio.h>
int
main()
{
FILE *xxl = popen("/bin/more","w") ;
if ( xxl == 0 )
{
perror("Error:");
return 0;
}
int i = 0 ;
for (i = 0 ; i < 100; i++)
{
fprintf(xxl, "blallsdflfsdlfsdfsdfsdfsdf") ;
fflush(xxl);
}
pclose(xxl) ;
}
#include <stdio.h>
int
main()
{
FILE *xxl = popen("/bin/more","w") ;
if ( xxl == 0 )
{
perror("Error:");
return 0;
}
int i = 0 ;
for (i = 0 ; i < 100; i++)
{
fprintf(xxl, "blallsdflfsdlfsdfsdfsdfsdf") ;
fflush(xxl);
}
pclose(xxl) ;
}