Hirdetés

Új hozzászólás Aktív témák

  • DarkByte

    addikt

    Sziasztok!

    Lenne egy érdekes kérdésem sh -vel kapcsolatban . Saját mini linux -on munkálkodom már jó ideje, jelenleg ott tartok hogy 3,5MB -ban van egy rendszerem amiben benne van a kis VIA gépem összes fontosabb driver -e kernel -be forgatva, PPP, dropbear, dnsmasq, illetve egy rakás más segédprogram a busybox -nak köszönhetően, és már tudom vele osztani a mobilnetet (végre valahára rendesen látja az e220 -as modemet is :C), jelenleg is azon keresztül pötyögök. Nagyon tetszik, mert többször gyorsabban boot -ol és kevésbé erőforrás igényesebb mint az XP Embedded, illetve végre elférek csak az alap 32MB -os DiskOnChip -en ;]

    Következő lépcsőfoknak egy szimpla modem felügyeleti programot szeretnék rá írni (ilyet már csináltam az Embedded -re), viszont mivel jelenleg C esetén állandóan virtuális gépben kellene kereszt fordítanom a kisgépre, átmásolni, utána ott tesztelni majd hiba esetén újra az egész, így úgy gondoltam tökéletesen megfelel nekem ha mindezt bash -ben írom (abban legalább van valamennyi tapasztalatom). Egész pontosan nem bash, mert ez csak szimplán sh és hiányzik is belőle pár hasznos dolog, például tömb kezelés, de kerülő úton ezeket már megoldottam. Egészen jól haladok vele, már az alap funkciók működnek, sőt a hónap eleji automatikus modem számlálók nullázása is megvan. A programról azt tudni kell hogy a modemmel társalgok a második soros porton, ez Windows felől a PC UI port amire a dashboard programja is ráül (nálam /dev/ttyUSB1). Van egy atcommand függvényem ami sablonosan így működik:

    atcommand ()
    {
    # input paraméterek lekezelése
    {
    echo "AT_PARANCS_A_MODEMNEK" > /dev/ttyUSB1

    read VALASZ_A_MODEMTOL -t IDO_TULLEPES

    # kapott adat ellenőrzése, megfelelő visszatérés
    } < /dev/ttyUSB1
    }

    A kapcsos zárójelezésre azért van szükség, mert ha ez nem volna akkor az echo -ra kapott választ vagy elkapja a read vagy nem, mivel közte nincs semmi ami buffer -elné a portot, így viszont működik. A gondjaim ott kezdődnek ha teszem azt kihúzom a modemet működés közben. Ha ez a kapcsos zárójeles rész előtt történik akkor nincs semmi gond, nem lép be a belső blokkba hanem utánna a $? változó értéke 2 lesz így tudom hogy nincs modem. Bent a read paranccsal sincs gond, ez ugyanis sima időtúllépéssel kilép így utánna ha ellenőrzöm hogy van-e még modem (valahogy így: [ -e /dev/ttyUSB1 ]) akkor is tudom mi történt (a modem úgysem tér észhez ilyen gyorsan szóval ez nem okoz deadlock szerű gondot hogy két parancsban ellenőrzök). A gondom az echo -nál van. Ha ugyanis pont olyan szerencsétlenül tűnik el a modem, hogy a kezdő kapcsos zárójelt még túléli, viszont itt jön egy váltás, az mdev törli a dev fájlt, akkor így létrehozok egy fájlt ugye a dev mappában ttyUSB1 néven aminek a tartalma az echo kimenete. Ez pedig nem jó, mert amint megint rádugom a modemet a gépre akkor az mdev nem tudja létrehozni a megfelelő eszközfájlt. :Y A kérdésem az lenne, hogy lehet-e úgy átirányítani kimenetet fájlba, hogy az csak akkor hajtódik végre ha a fájl létezik, egyébként hibát dobjon. Eddig nem nagyon találtam ilyesmit. :( Lock fájl létrehozásnál már találkoztam a

    set -o noclobber

    opcióval ami pont a fordítottját csinálja vagyis ha létezik a fájl akkor nem engedi felülíratni, de nekem nem ez kellene. :F

    Kicsit paranoid lehet amit ki akarok védeni, mert nagyon ritkán fordulna elő, de ha már lehet akkor miért ne oldanám meg elegánsan. :)

    Előre is kösz a segítséget. :R

Új hozzászólás Aktív témák