1. Mobilabonnemang: Välj kampanj som passar dig bäst! 4 månader till halva priset eller 2 månader till halva priset och 50 GB (giltigt i 12 månader). Ingen bindningstid & fria samtal ingår i alla abonnemang.
    Stäng notis
  2. Stäng notis
  3. Unpacked-nyheter: Fold 4 | Flip 4 | Watch 5 | Buds Pro 2
    Stäng notis
  4. Registrera ett konto och bli del av Sveriges förmodligen trevligaste och mest hjälpsamma community.
    Stäng notis
  5. Stäng notis
  6. Stäng notis
  7. Stäng notis
  8. Stäng notis
  9. Stäng notis

ls -lh ger fel output på stora filer

Diskussion i 'Allmänt' startad av Jaman42, 18 apr 2014.

  1. Jaman42

    Jaman42 Baby Droid Medlem

    Blev medlem:
    6 apr 2014
    Inlägg:
    20
    Mottagna gillanden:
    16

    MINA ENHETER

    Hej,
    Om jag kör ls -lh på små filer så ger den korrekt output men om jag kör den på filer som är 4GB + så får jag t ex 394 005 664 när det igentligen borde vara 4 688 972 960. Det jag försöker göra är köra os.path.getsize() i Python men det ger mig också 394 005 664.

    Enda alternativet jag hittat hitills som fungerar är "stat -c %s" som ger mig korrekt storlek 4 688 972 960.

    Någon som vet varför ls -lh och os.path.getsize() ger mig fel output på stora filer?
     
  2. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 297
    Mottagna gillanden:
    139

    MINA ENHETER

    Det ser ut som om du drabbas av en 32-bitars overflow. En unsigned 32 bitars int kan innehålla tal som är max 4294967295. I talet 4 688 972 960 är den 33e biten satt. När den 33e biten blir nollställd får du 394 005 664.

    m v h Henrik
     
    Jaman42 och svenix gillar detta.
  3. Jaman42

    Jaman42 Baby Droid Medlem

    Blev medlem:
    6 apr 2014
    Inlägg:
    20
    Mottagna gillanden:
    16

    MINA ENHETER

    Hej Henrik,
    Skönt att få en förklaring som "makes sense" :)

    Finns det något sätt att fixa det på eller är det helt enkelt så mitt system fungerar med nuvarande kernel?
     
  4. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 297
    Mottagna gillanden:
    139

    MINA ENHETER

    Med tanke på att applikationen stat fungerar så ligger inte problemet i din kernel utan i de applikationer som har problemet.

    Jag blir lite förvånad att ls -lh skulle ge ett sådant problem, applikationen ls är ju gjord just för att lista filer och så vitt jag vet brukar ls kunna hantera filer större än 4 GB även på 32-bitars system.

    Dessutom innebär ju flaggan "-h" att storleken skall visas som "human readable" med suffix som k, M eller G. Därför borde du med ls -lh fått se något i stil med "4471M".

    Vad är det för system som du har problemet på?

    m v h Henrik
     
  5. Jaman42

    Jaman42 Baby Droid Medlem

    Blev medlem:
    6 apr 2014
    Inlägg:
    20
    Mottagna gillanden:
    16

    MINA ENHETER

    Det är en Radxa Rock, jag har testat både Android 4.2.2 och 4.4.2.
     
    Last edited: 26 apr 2014
  6. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 297
    Mottagna gillanden:
    139

    MINA ENHETER

    Efter att ha googlat lite tycker jag att det verkar som om den även skall kunna boota Ubuntu, hur uppför sig ls i ubuntu?

    På min telefon som kör Android 1.6 klagar ls om man försöker göra "ls -h", d v s det går inte alls. Från dina exempel verkar det som om "ls -h" iallafall ger output, men ett felaktigt output.

    Har du i Android tillgång till kommandot "strace"? I så fall skulle du kanske kunna se när det går fel om du gör:

    strace ls -l storfil

    m v h Henrik
     
  7. Jaman42

    Jaman42 Baby Droid Medlem

    Blev medlem:
    6 apr 2014
    Inlägg:
    20
    Mottagna gillanden:
    16

    MINA ENHETER

    Hej igen Henrik,
    Det är busybox som ger mig -h funktionaliteten.

    Just att ls -l inte fungerade som det ska visade sig vara att jag installerade en annan version på den integrerade versionen av busybox. Jag visste inte att det redan fanns integrerat.

    Så ls -l fungerar nu som det ska!

    os.path.getsize() i Python fungerar fortfarande inte men det är nog snarare något fel i mitt Python paket så det blir till att felsöka på annat forum.

    Tack så mycket för all hjälp!