DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > system / noixemul | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-07-19, 22:04 h Mazze Posts: 263 User |
Hi,code:#include <stdlib.h> #include <stdio.h> int main (void) { int r; r = system("EditPad"); printf("Rück %dn", r); return 0; } Dieses Beispiel funktioniert, wenn ich mit "-noixemul" kompiliere. Ohne diese Option wird der Editor nicht gestartet und r den Wert 32512. Ich habe schon versucht, den Linux-Pfad anzugeben (/sys/tools/editpad). Klappt aber nicht. Wie geht es? MFG Matthias [ - Answer - Quote - Direct link - ] |
2004-07-20, 02:49 h whose Posts: 2156 User |
Ähm, das ist jetzt blanke Spekulation, weil ich mich mit ixemul aus Prinzip nicht beschäftigt habe, aber kann es sein, daß der Wert von r darauf hindeutet, daß das Prog schon gestartet ist, aber halt nicht korrekt? War es nicht so, das system() vor allem dazu dient, ausführbare (Unix)Programme in einer sh-Umgebung zu starten? Da paßt EditPad nun ja nicht gerade hinein, oder? Versuch doch mal, ein simples CLI-only-Programm damit zu starten, das müßte dann eigentlich tun. Grüße [ - Answer - Quote - Direct link - ] |
2004-07-20, 08:07 h Solar Posts: 3680 User |
system() übergibt den String an die OS-spezfische Kommandozeile. Ob das nun eine DOS-Box, eine sh/bash, ksh, oder AmigaDOS ist, spielt keine Rolle. Du könntest mal einen Nullpointer an system() übergeben, damit prüfst Du quasi die "Verfügbarkeit" der Shell: 0 heißt, daß keine Shell aufgerufen werden konnte. [ - Answer - Quote - Direct link - ] |
2004-07-20, 20:52 h Mazze Posts: 263 User |
Wenn ich 'system' mit NULL aufrufe, erhalte ich in beiden Fällen das Ergebnis '1'. [ - Answer - Quote - Direct link - ] |
2004-07-22, 08:14 h gni Posts: 1106 User |
Zitat:Gennau so :) Ich habe das Beispiel (ohne printf) ausprobiert und es ging, wenn editpad im Suchpfad war. Bei Angabe des Pfades (entweder sys:tools/ oder /sys/tools/) hat es wie erwartet funktioniert. Gibt es auf Deinem System in env: eine PATH Variable? Wenn nicht dann prüf in der sh (ausführen und dann echo $PATH) welchen Wert die Variable hat. [ - Answer - Quote - Direct link - ] |
2004-07-22, 12:18 h whose Posts: 2156 User |
*stirnklatsch* Ich bin viel zu verwöhnt von der Möglichkeit, den Suchpfad vorzugeben, merke ich gerade. Sollte ich mal wieder ein bißchen zurückfahren und Pfade selbst eintackern, dann fällt mir sowas vielleicht wieder früher auf Grüße [ - Answer - Quote - Direct link - ] |
2004-07-22, 12:51 h gni Posts: 1106 User |
Zitat:Bei ixemul ist es /leicht/ anders. Da ist nicht c:path entscheidend, sondern $PATH der /bin/sh. Das sollte man bei ixemul (der UN*X Emulation) beachten. [ - Answer - Quote - Direct link - ] |
2004-07-22, 12:58 h whose Posts: 2156 User |
Zitat: Naja, das _Prinzip_ ist das Gleiche Aber trotzdem: Wieder was gelernt! Danke Dir Grüße [ - Answer - Quote - Direct link - ] |
2004-07-22, 21:52 h Mazze Posts: 263 User |
code:7.Workbench:> dir env:path Could not get information for env:path Objekt nicht gefunden 7.Workbench:> sh # echo $PATH /bin:/usr/bin:/usr/ucb Wie geht es weiter? [ - Answer - Quote - Direct link - ] |
2004-07-23, 09:16 h gni Posts: 1106 User |
Zitat:Macht es Sinn sichmit c:dir ein datei anzuzeigen? Versuchs mal c:list env:path (oder nur env: aber dann geht auch dir :) Zitat:Das sieht nach den Satnadrdeinstellungen aus (also kein env:path) Zitat:system("/sys/tools/editpad") oder halt system("sys:tools/editpad") sollte Editpad ausführen bei Verwendung der ixemul. Bei -noixemul gehts ohne Pfad oder mit dem Amigapfad, da indem Fall die Einstellung von c:path des Vaterprozesses deines Programmes (entweder eine Shell oder die WB) auschlaggebend ist. [ - Answer - Quote - Direct link - ] |
2004-07-23, 23:40 h Mazze Posts: 263 User |
code:5.Work:CProj> c:list env:path No information for "env:path": Objekt nicht gefunden 5.Work:CProj> code:#include <stdlib.h> #include <stdio.h> int main (void) { int r; r = system("/SYS/Tools/EditPad"); printf("Rück %dn", r); r = system("SYS:Tools/EditPad"); printf("Rück %dn", r); return 0; Ohne -noixemul hat r in beiden Fällen den Wert 32512. Ich habe auch schon probiert, statt der VNC-Shell die normale zu nehmen: keine Änderung. [ - Answer - Quote - Direct link - ] |
2004-07-24, 12:01 h Palgucker Posts: 1342 User |
@ Mazze Hab das ganze auch mal probiert, und ich muss sagen, Du bist nicht allein. An ENV-Variablen scheint es nicht zu liegen, denn die werden (laut SnoopDos) garnicht erst abgefragt. Benenne ich aber Editpad in sh um, bekomme ich zumindest den RC 5120 und die Fehlermeldung: Falsche Anzahl an Argumenten Erst wenn ich die Quelltextzeile r = System("Editpad"); in r = System(""); ändere, startet Editpad und öffnet die Datei -c. Also merkwürdig ist das schon, zumal man das aufzurufende Programm in sh umbenennen muss, ein alias reicht nicht. mfg Palgucker [ - Answer - Quote - Direct link - ] |
2004-07-24, 12:16 h Solar Posts: 3680 User |
Da würde sich evtl. anbieten, mal "sh" zu starten, und zu versuchen, aus sh EditPad aufzurufen. Denn was Palgucker hier bewiesen hat, ist, das system() durchaus korrekt das Executable "sh" aufruft - das Problem liegt also irgendwo "auf der anderen Seite". Habt ihr evtl. kein sh installiert / eingerichtet? [ - Answer - Quote - Direct link - ] |
2004-07-24, 13:43 h Palgucker Posts: 1342 User |
@ Solar qoute: Habt ihr evtl. kein sh installiert / eingerichtet? Bingo Hab auch schon nach einen Binary namens sh 'rumgesucht, aber nichts gefunden. Im sh-util Paket ist es auch nicht d'rin. Vielleicht kann mir da einer auf die Sprünge helfen? mfg Palgucker Nachtrag: Habe nun sh in der Boot.lha gefunden, in ein Verzeichnis im Suchpfad kopiert - und voila, es funktioniert wie es soll. [ Dieser Beitrag wurde von Palgucker am 24.07.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-07-25, 21:20 h Mazze Posts: 263 User |
Wenn ich folgendes in eine Shell eingebe:code:5.Work:CProj> sh # /sys/tools/editpad # sys:tools/editpad dann startet der Editor in beiden Fällen. [ - Answer - Quote - Direct link - ] |
2004-07-26, 00:49 h Palgucker Posts: 1342 User |
@ Mazze quote: Wenn ich folgendes in eine Shell eingebe: code:5.Work:CProj> sh # /sys/tools/editpad # sys:tools/editpad dann startet der Editor in beiden Fällen. [ Ich gehe mal davon aus, das Editpad aus Deinem Programm heraus immer noch nicht startet. Liegt das Verzeichnis Work:CProj/ im AmigaDos Suchpfad ? Wenn nicht, tippe doch probeweise in eine Shell path Work:CProj add und starte dann Dein Programm. mfg Palgucker [ - Answer - Quote - Direct link - ] |
2004-07-26, 17:08 h gni Posts: 1106 User |
Zitat:Ha, reingefallen! ixemul puffert env:, da das Auslesen eines Verzeichnisses langsam ist. Zitat:Was versuchst Du? Du kannst nicht ein beliebigen Programm sh nennen! ixemul ist eine _un*x Emulation_ und verhält sich entsprechend. Zitat:Weil das Argument von system() an die sh per -c übergeben wird. Zitat:Keine Ahnung was bei Euch das Problem ist. Hier funktioniert es wie es soll. Vermutlich ist es nur im Posting falsch, aber die Funktion heisst system (kleines s). Gibt es bei Dir ein env:PATH? [ Dieser Beitrag wurde von gni am 26.07.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-07-26, 17:14 h gni Posts: 1106 User |
[quote] Palgucker: Zitat:Immerhin etwas ;-) Was ist wenn Du einer der beiden Zeilen ins Programm übernimmst? Wenns direkt in der sh geht, sollte es auch per programm gehen. Zitat:Der AmigaDOS Pfad ist für ixemul _irrelavant_. Bei einem absoluten Pfad ist der AmigaDOS Pfad auch bedeutungslos. [ - Answer - Quote - Direct link - ] |
2004-07-26, 20:04 h Palgucker Posts: 1342 User |
@ gni quote: Ha, reingefallen! ixemul puffert env:, da das Auslesen eines Verzeichnisses langsam ist. Jupp - nach einem flushlibs und damit verbundenen neuladen der ixemul.library konnte ich's nun auch deutlich sehen. Wieder was gelernt. quote: Was versuchst Du? Du kannst nicht ein beliebigen Programm sh nennen! ixemul ist eine _un*x Emulation_ und verhält sich entsprechend. Auf meinen Rechner kann ich sh nennen, was ich will. Aber im ernst, diese Aktionen waren auch nur Versuche ohne tiefere Bedeutung. Aber zumindest hat es die Wirkung gehabt, das es bei Solar gleich klick gemacht hat und er fragte, ob ich denn überhaupt sh installiert habe. Tja, und da ich sh noch nicht mal auf Platte hatte, war dieses eben die Lösung für mich. quote: Weil das Argument von system() an die sh per -c übergeben wird. Das ist mir nun auch klar - sprich ein Aufruf im Qellcode ala r = system("Sys:Tools/Editpad"); entspricht dem Aufruf aus einer Amigashell >sh -c sys:Tools/Editpad quote: Keine Ahnung was bei Euch das Problem ist. Hier funktioniert es wie es soll. Vermutlich ist es nur im Posting falsch, aber die Funktion heisst system (kleines s). Gibt es bei Dir ein env:PATH? Bei mir funktioniert es nun ja auch. Mit (r=system(Editpad) und ohne (r=system(Sys:Tools/Editpad) ENV:PATH (Sys:Tools/). Ein Fallstrick könnte hierbei aber die Pufferung der ENV-Variablen durch ixemul sein, da Änderungen erst nach einen flush der ixemul.library wirksam werden. quote: Der AmigaDOS Pfad ist für ixemul _irrelavant_. Bei einem absoluten Pfad ist der AmigaDOS Pfad auch bedeutungslos. Dem möchte ich mal wiedersprechen. Wohlgemerkt geht es hier nicht um Editpad, sondern um das finden des Programms sh. Und dazu werden alle Verzeichnisse im Amigados Suchpfad "abgeklappert". Und das ist wahrscheinlich das Problem bei Mazze, das sh einfach nicht gefunden wird, weil sh in irgendeinem Verzeichnis "rumlungert", in dem nicht gesucht wird mfg Palgucker [ - Answer - Quote - Direct link - ] |
2004-07-27, 18:39 h obw Posts: 94 User |
Zitat: Was hat der Consolen-Handler mit dem Pfad zu tun? Und warum hast Du nicht auch noch KingCON ausprobiert? SCNR OBW [ - Answer - Quote - Direct link - ] |
2004-07-27, 22:10 h Mazze Posts: 263 User |
Jetzt gehts. Ich musste mit dem AmigaDos-Kommando "path" das Verzeichnis, in dem "sh" steht, einbinden. Ich bedanke mich für eure Hilfe. @ Komiker obw: Wenn man nach einem Fehler sucht, dann gehört die Verwendung von nicht standardmäßigen Tools zu den möglichen Fehlerquellen. Es könnte durchaus sein, dass die VNC-Shell nicht 100% kompatibel zur Shell ist. [ - Answer - Quote - Direct link - ] |
2004-07-28, 09:24 h gni Posts: 1106 User |
Zitat:Ups, gg:bin ist bei mir natürlich im Pfad. Hast Du ein bin: assign? Beides gehört zu einer "Standard"-Installation von GG. Wieso fehlte das Verzeichnis? AFAIK, müsstes es auch ohne bin: im AmigaDOS Pfad gehen, da die sh in /bin(=bin:) gesucht wird. In diesem Fall bin ich mir aber nicht ganz sicher, was die ixemul genau tut. [ - Answer - Quote - Direct link - ] |
2004-08-01, 11:07 h Mazze Posts: 263 User |
Sorry für die späte Antwort. Die Installation von der GoldEd-CD weicht möglicherweise vom Standard ab. So sehen meine gg-relevanten assigns aus:code:var usr man info etc bin local gg Work:devkits/compilers/gcc/classic/latest C Workbench:C + Work:devkits/tools/cprefs/bin + Work:devkits/tools/ccselect/bin + Work:devkits/tools/make/bin + Programme:Develop/BASIC/c + Work:devkits/compilers/gcc/classic/latest/bin + Work:devkits/compilers/vbcc/classic/latest/bin S Workbench:S + Work:devkits/compilers/gcc/classic/latest/sys/s LIBS Workbench:Libs + Workbench:Classes + Programme:Werkzeuge/MUI/Libs + Programme:Develop/golded/etc/libs + Programme:Develop/BASIC/libs + Work:devkits/compilers/gcc/classic/latest/sys/libs DEVS Workbench:Devs + Work:devkits/compilers/gcc/classic/latest/sys/devs FONTS Workbench:Fonts + Programme:Develop/golded/etc/fonts L Workbench:L + Work:devkits/compilers/gcc/classic/latest/sys/l [ Dieser Beitrag wurde von Mazze am 01.08.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > system / noixemul | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |