[Linux-programlama] Re: yivli getpwuid_r() kullanımı

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Volkan YAZICI (yazicivo@ttnet.net.tr)
Date: Sun 15 Jan 2006 - 12:49:52 EET


On Jan 15 02:56, Nilgün Belma Bugüner wrote:
> getpwuid_r'nin ilk argümanı uid olması gerekirken, siz
> pid vermişsiniz. Süreç numarası ile sürecin aidiyeti (persona)
> farklı şeyler.

manual sayfasını yüz kere okuyup bunu farketmemem oldukça ilginç.
Ama ne yazık ki orjinal kodda, bu hata yok. Benim ufak betiğimde
dediğiniz şekilde düzeltme yaptıktan sonra SIZE sabit kalmasına
rağmen RSS hala artıyor. valgrind çıktısında da yine bir değişiklik
yok, aynı hata raporları.

Kodda yaptığım değişiklikler ise şu şekilde:

***************
*** 6,11 ****
--- 6,12 ----
  
  #include "pthread.h"
  
+ uid_t user_id;
  pid_t proc_id;
  char cmd[128];
  
***************
*** 38,44 ****
        struct passwd old_pw;
        struct passwd *new_pw;
  
! ret = getpwuid_r(proc_id, &old_pw, buf, sz, &new_pw);
        if (ret)
                fprintf(stderr, "getpwuid_r() failed! ret = %d\n", ret);
        
--- 39,45 ----
        struct passwd old_pw;
        struct passwd *new_pw;
  
! ret = getpwuid_r(user_id, &old_pw, buf, sz, &new_pw);
        if (ret)
                fprintf(stderr, "getpwuid_r() failed! ret = %d\n", ret);
        
***************
*** 53,58 ****
--- 54,60 ----
        pthread_t threads[thread_count];
        int i, ret;
  
+ user_id = geteuid();
        proc_id = getpid();
        sprintf(cmd, "ps -p %d -o rss,size", proc_id);

(Yukarıdaki geteuid() yerine getuid() yazıp denediğimde de gene aynı
sonucu alıyorum.)

Bir de olayın şu yüzü var, get[e]uid() kullanmaya başladıktan sonra,
RSS değerleri sanki bir noktadan sonra sabit kalıyor gibi. Bu nokta
rastgele olmasına rağmen genelde böyle oluyor. (Ama bu hep böyle
olduğu anlamına gelmiyor.) Fakat bu gerçekleştiğinde bile, valgrind
gene hata vermeye devam ediyor.

Bir de kafama şöyle bir soru takıldı: Farzedelim ki sorun benim
get[e]uid() yerine getpid() kullanmamdan kaynaklanıyordu. Peki
getpwuid_r() çağrısına aynı tipte (bildiğim kadarı ile uid_t ile
pid_t aynı tamsayı tipinde) yanlış değer verdiğimizde neden hafıza
taşmasına sebep olsun ki?

İyi çalışmalar.

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.