Zum Inhalt springen

hoagi

Mitglieder
  • Gesamte Inhalte

    109
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von hoagi

  1. Hallo, ich denke das Problem könnte an dem Kommandointerpreter liegen. NT hat derer 2. cmd.exe und command.com. Kann sein das NT die Batchdatei mit der command.com aufruft. Wenn ich micht recht entsinne kennt NT auch die Dateiendung .cmd. Nenn deine Batchdatei mal so vielleicht klappts ja dann( Hab leider kein NT im Moment greifbar zum Ausprobieren ) Hoagi
  2. hoagi

    Probleme mit fgetc

    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> while ((buffer[pos++] = fgetc(fz)) != ' ');
  3. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Eine andere Möglichkeit wäre vmware in Verbindung mit samba, aber dass ist dann ziemlich "krank", teuer und ressourcenfressend
  4. Ops, dann natürlich besser die Finger von lassen. Wenn dir deine Daten lieb sind. Samba kann übringens in dem Fall nur helfen, wenn du einen zweiten Rechner mit NT im Netz hast. Samba ermöglicht dann den Dateizugriff über SMB-Shares. Sorry für schlechten Tip Hoagi <FONT COLOR="#a62a2a" SIZE="1">[ 21. September 2001 22:50: Beitrag 1 mal editiert, zuletzt von hoagi ]</font>
  5. Einfach: Partition mounten mount -t ntfs /dev/hda1 /mnt /dev/hda1 mußt du natürlich durch deine NTFS-Partition austauschen. hoagi <FONT COLOR="#a62a2a" SIZE="1">[ 21. September 2001 17:40: Beitrag 1 mal editiert, zuletzt von hoagi ]</font>
  6. hoagi

    Funktionen

    Mit Verlaub und als nichtmoderator, dat hab ich jetzt nicht verstanden. :confused: Hoagi
  7. hoagi

    ODBC-Schnitstelle

    Hi, also wenn du mal die Fehlermeldung genauer benennen könntest. Wenn der Fehler bei WriteString auftritt hast du ja kein ODBC - Fehler sondern einfach ein Dateizugriffsfehler. Prüfen mal den return -Wert deines Open - Aufrufes. Hoagi
  8. Hi, das Problem ist ja nicht eine lokale Anmeldung zu erzwingen, sondern die Anmeldung an die Domäne zu binden. Da sich Win9x Rechner aber nicht wirklich an der Domäne anmelden ist dies wohl so nicht möglich. Hoagi
  9. Noch einen kleinen Hinweis Mit der Memberfunktion flags kann auch noch die Interpretation von Zahlen mit ner anderen Basis als 10 abblocken. Mit cin.flags( cin.flags() | ios::dec ) setzt man das entsprechende Flag für Dezimalzahl, wass aber das Problem mit dem nach der Zahl kommenden Zeichen aber nicht behebt. 0x1 ergibt dann eben 0. Hoagi
  10. Also ich mal nochmal nachgeschaut. Der Operator >> entfernt alle führenden Leerzeichen und liest in der Intvariante dann alle Zeichen bis er auf ein nicht Interpretierbares Zeichen trifft. Dann bricht er die Suche ab. Dabei interpretiert er aber auch solche Sache wie 0xa0 (Hexzahl ). Findet er nur Whitespaces erwartet er eine Neueingabe. Ansonsten setzt er die bis dahin gelesenen Zeiche als Zahl um. Sind nicht nur Whitespaces im String und bringt er die bisdahin gelesenen Zeichen nicht zu einer Zahl zusammen setzt er ein Statusbit das mit der Memberfunktion fail abgefangen werden kann. also: cin>>i; if ( cin.fail() ) { //Fehler bei Eingabe } else { //irgendwas interpretierbares gefunden } Das Problem liegt in dem irgendwas interpretierbares gefunden So ist 0xx1 ein Fehler weil beim ersten nicht mehr zu interpretierenden Zeichen ( dem 2. x ) noch nichts sinnvolles bei rausgekommen ist ) während 0x1xx0000sdjslödsöd z.B. eine 1 ergibt, eben 0x1. Wenn das reicht kamm man damit arbeiten, ansonsten muß wohl doch selbst Hand anlegen. Hoagi
  11. Hi, Also ich glaube , daß sich da zwischen Win9x und WinME nicht so viel geändert hat. Wenn dem so ist dann geht das nicht. Hoagi
  12. Hi , also ich glaube auch das der Programmabsturz ausder falschen Benutzereingabe resultiert, sondern woanders herkommen muß. Crush: Also das ist jetzt vielleicht Ansichtssache aber ich finde es ein wenig drastisch auf ein falsche Benutzereingabe programmtechnisch mit einer Exception zu reagieren. Also um falsche Benutzereingabe zu abzufangen muß nman diese auch prüfen. Also das einfachste wäre : Eingabe nicht als Interger sondern als String, Gültigkeit prüfen, dann Umwandeln in Integer. Natürlich kannst du das ganze auch in eine eigene Klasse kapseln und den Operator >> anders überladen. Und hier wäre es dann vielleicht auch sinnvoll Eingabefehler über Exceptions abzuhandeln. Hoagi
  13. Hi Maddin, also prinipiell kann man den Stackpointer boshafterweise so verbiegen, daß die Rücksprungadresse nicht mehr passt, nur ist dies beim normalen Umgang mit zu übergebenden Parametern und lokalen Adressen nicht möglich. Diese werden nämlich mit stacküblichen Befehlen vom Stack geholt sondern über normale Speicherzugriffsbefehle z.B.: mov ax,[esp+10] ausgelesen. Der normale Vorgang ist aufrufendes Programm: push parameter1 push parameter2 ... push parametern call funktion auferufendes Programm: Sichern des Stackpointers Platz schaffen für lokale Variablen (sub esp,'Anzahl der für lokale benötigten Bytes ) Irgendwas Tun Sowohl Lokale Variblen werden als Speicher relativ zum Stackpointer angesprochen( nix push und nix pop ) Rücklesen des Stackpointers return aufrufendes Programm nach Funktionsaufruf: add,esp+'Anzahl Bytes die vorher übergeben worden sind' Der letzte Teil Unterscheidet sich nun bei C und Pascal. add,esp+'Anzahl Bytes die vorher übergeben worden sind' Fällt weg, dafür sieht Returnbefehl so aus: return 'Anzahl der übergenden Bytes' Aber du siehst ohne Bosshaft zu sein( oder Stack irgendwie zum überlaufen zu bringen ) bestehen eigentlich wenig Chancen, daß die aufgerufende Funktion die Rücksprungadresse verpasst. Oder hab ich dich irgendwie falsch verstanden. Hoagi
  14. Hallöschen, um hier noch ein kleines Mißverständnis aufzulösen. natürlich findet die Funktion die Rücksprungadresse auch wenn die Anzahl der Parameter nicht mit denen im Formatstring übereinstimmt. Sie liegt nämlich ganz oben auf dem Stack. Zuerst werden die Parameter auf den Stack gelegt und dann die Funktion aufgerufen( und damit auch die Rücksprungadresse als letztes auf den Stack gelegt ). Andersrum wärs ja auch ein bisschen komisch. Zuerst die Funktion aufrufen und dann, quasi im Losfahren, die Parameter reinwerfen. Und auch die Bereinigung des Stacks ist kein Problem, da bei der C-Aufrufkonvention anders als z.B. bei Pascal ( und hier gibt es glaub ich auch keine Funktionen mit variabler Parameterliste ) der Aufrufende den Stack bereinigt und hier weiss der Compiler genau wieviel Daten er auf denselben gelegt. Wie gesagt bei Pascal wird der Stack vom aufgerufenden Program bereinigt und dafür gibsts dann parametrisierte Return - Assemblerbefehle. Vorteil dabei: Es wird etwas kleinere Programme erzeugt ( Man hat halt normalerweise mehr Funktionsaufrufe als Funktionen im Program). Hoagi :eek: :eek: :cool:
  15. Hi Crush, ich hab zwei Neuigkeiten für dich. Eine gute und eine schlechte. Die Schlechte zuerst: Das Leben ist noch komplizierter geworden als du denkst. Nun die gute: Das kann dir als nicht Betriebssystemprogramierer( und mir als auch nicht Betriebssystemprogramierer auch ) völlig Schnurz-Piep sein. Also prinzipiell habe ich den Eindruck, daß du da ein paar Sachen durcheinander wirfst. 1. Paging hat nichts mit Segmentierung zu tun. 2. Die durch die Unzulänglichkeit der 16 Bit -Registern 1 MB in einem Stück zu verwalten erzwungende Segmentierung hat so gar nichts damit zu tun irgend ein Program davon abzuhalten auf Speicherbereiche zuzugreifen auf die es nicht zugreifen soll, bzw die es physikalisch gar nicht gibt. Im Gegenteil im Realmode würdest du Zugriffe auf nicht existierenden Speicher nicht mal merken. Die Verlaufen klaglos im Leeren. Schreibbefehle auf im Speicheradressbereich eingeblendete ROM-Bausteine werden genauso verschluckt wie der Versuch Speicher zu lesen wo gar nichts ist ( es gibt halt nur nicht mehr soviele Maschinen mit weniger als 1 MB Speicher ) Und auch die Adressumrechnung 4*Segment + Offset sind schon seit dem 286 Protected Mode obsolet. Statt dessen verweisen die Segmentregister auf irgendwelche Tabellen( ich habs mal gelesen wie das geht, nie gebraucht und wieder vergessen ). Und irgendwie spielen da auch zwei Register eine Rolle ( GDTR = Global Descriptor Table Register und LDTR = Local Descriptor Table Register ) In den Segmentregistern stehen dann auch noch irgendwo ein paar Bits ( 4 wenn ich mich nicht irre ) die die Art des Segments und die Privilegsstufe des Segments drin ). Ein Bit kennzeichnet dabei ob es sich um ein Codesegment oder ein Datensegment handelt. Speicher der über ein Codesegment angesprochen wird kann normalerweise nicht gelesen und nicht beschrieben werden ( ADE selbstmodifizierenden Code) Datensegmente können nicht ausgeführt werden. Mit einem Bit kann bestimmt werden , daß Codesegmente zumindest gelesen werden können oder Datensegmente Schreibgeschützt sind. Die beiden anderen Bits bestimmen die Privilegstufe (0 - 3 ). Wobei Tasks( werden beim Prozessor durch Datenestrukturen dargestellt wo auch irgendwo eine Privilegstufe drinsteht ( glaub ich zumindest, oder war es die aktuelle Privilegstufe des CS ) nur auf ein Segment zugreifen können die eine niedrigere oder gleiche Privilegstufe wie das Segment haben. Naja das klingt alles furchtbar wirr, aber wie gesagt mal gelesen nie gebraucht. Wichtig für einen Programmierer ist eigentlich nur, daß er sich an gewisse Regeln halten muß ( nicht mit Segmentregistern rumspielen sonst gibst Ärger mit dem Betriebssystem ) Achso bei eingeschaltetem Paging klappt das genauso nur ein bisschen komplizierter dafür nur zwei Privilegstufen. Also wenns dich interessiert lies es nochmal wo nach, ansonsten Munter drauf los und Finger weg von den Segmenten. Um zum Schluß mal wieder den Dreh zum Ursprungsthema zu kriegen: Alle Verstöße gegen die Regeln werden mit einer Exception quitiert die dann letzlich einen Interrupt auslösen. Die müßen dann vom Betriebssystem gehandelt werden und der Händler steht dann auch nicht mehr wie im Real Mode im ersten Bereich des physikalischen Speichers, sondern werden wieder über ein spezielles Register dem IDTR ( Interrupt Description Tables Register ) mit Verweis auf einen bestimmten Speicherbereich verwaltet Hoagi <FONT COLOR="#a62a2a" SIZE="1">[ 28. August 2001 18:58: Beitrag 1 mal editiert, zuletzt von hoagi ]</font>
  16. Um mal wieder Korinthen zu kacken ( was für eine schöne Redewendung/ ich hoffe ich habe Korinthen richtig geschrieben/ was fürn Witz Korinthen kacke und dann Korinthen auch noch falsch zu schreiben ). Diesen Monsterstack gibt es und zwar seit dem 386er. Zwar nicht im Realmode oder 16 Bit Modus aber mal Hand aufs Herz wer arbeitet heutzutage noch mit nem 16 Bit-Kompiler. Was macht das E vor dem SP ??? Es extendiert. Seit dem 386 sind alle Register bis auf die Segmentregister auf 32 Bit aufgebohrt und tragen dann ein E vor ihrem Namen ( EIP EAX ESP EFLAG usw ). Und das ganze hat auch nichts mit dem Paging zu tun sondern allein damit ob der Prozessor im 16 oder 32 Bit-Modus läuft. 32 Bit ESP heißt theoretisch 4 GB Stackspeicher. Und damit läßt sich schon jede Menge rekursierven ( oder wie auch immer das Verb von Rekursiv heißt ) Also nur Mut Crash sei recursive(recursive(recursive(recursive(...)))). Hoagi
  17. hoagi

    Boot.ini

    [boot loader] timeout=10 default=c:\ [operating systems] C:\ = "Microsoft Windows Second Edition" multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
  18. Hi nen paar mehr Angaben über Rechner/BIOS/Betriebssystem könnten hier hilfreich sein. Hoagi
  19. hoagi

    Boot.ini

    Ich nehm mal an du hast zuerst win2k in eine ntfs - Partitiion und dann win98 in Fat Installiert. Windows 98 kann die ntfs-Partition nicht lesen und überschreibt einfach den 2000er Bootmanager Eine Möglichkeit ist einfach WIN2000 nochmal drauf installieren. Um 2000 nicht nochmal komplett neu zu installieren kannst du einfach ein anderes Verzeichnis als \winnt z.B. \winnt1 bei der Installation angeben. Nachdem die Mini Win 2000 Installation abgeschlossen einfach in der Boot.ini winnt1 durch winnt ersetzen. Dann sollte deine alte 2000er Installation wieder ohne Probleme funktionieren. Hoagi
  20. Um mal nen bisschen Korinthenkackerei zu betreiben. Ein Interrupt ist zunächst einmal ein spezieller Prozessorsprungbefehl, der durch unterschiedliche Quellen ausgelöst werden kann. Zwei davon sind die beschriebenden externen Quelle. NMI und IRQ. IRQ und Interrupt werden oft verwechselt. Tatsächlich stimmen meist die ausgelösten Interuptnummern nicht mal mit der IRQ-Nummer überein. Andere Möglichkeiten: 1) Der Assembler Int Befehl. Für Dosprogramierer ist hier z.B. der INT 21h der als Schnittstelle zur DOS-Api ( wenn mans so nennen will ) dient interessant. 2) Bestimmte Prozessorzustände und -fehler: - Dividion durch NULL - Ungültige Prozessorbefehle - Nutzung von FPU-Befehlen ohne CO-Prozessor (wird genutzt für FPU-Emulatoren) - Zugriff auf ungültige Speicherseiten/ wird fürs Paging genutzt ) ...... Hoagi
  21. Kingt gut , aber was soll es denn sein ????? Hoagi
  22. hoagi

    network

    Probier mal http://www.netzmafia.de Hoagi
  23. hoagi

    Rassismus!

    Na, ist wohl noch ein Unterschied ob ich in' ner Machtstellung, wie Microsoft, aufgrund agressiver Marktpolitik mit zum Teil schlecht entwickelten Produkten ner Harten Kritik ausgesetzt( und nenn mir hier ruhig Rassist ) werde, oder ob ich aufgrund meiner Rasse, Nationalität usw als Prügelknabe der Nation hingestellt werde.
  24. hoagi

    Rassismus!

    Frage: Bist du Scientologe arbeitest du bei der IHK oder ist dein wahrer Name Bill Gates ??????? Ne ohne Scheiss, wirfst du da nicht ein paar zu viele Dinge in einen Topf. Hoagi

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...