amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > system / noixemul [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.07.2004, 22:04 Uhr

Mazze
Posts: 263
Nutzer
Hi,

code:
#include <stdlib.h>
#include <stdio.h>

int main (void)
{
  int r;
  r = system("EditPad");
  printf("Rück %d\n", 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

[ - Antworten - Zitieren - Direktlink - ]

20.07.2004, 02:49 Uhr

whose
Posts: 2156
Nutzer
Ä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

[ - Antworten - Zitieren - Direktlink - ]

20.07.2004, 08:07 Uhr

Solar
Posts: 3680
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

20.07.2004, 20:52 Uhr

Mazze
Posts: 263
Nutzer
Wenn ich 'system' mit NULL aufrufe, erhalte ich in beiden Fällen das Ergebnis '1'.

[ - Antworten - Zitieren - Direktlink - ]

22.07.2004, 08:14 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Original von Mazze:
code:
#include <stdlib.h>
#include <stdio.h>
int main (void)
{
  int r;
  r = system("EditPad");
  printf("Rück %d\n", 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?

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.

[ - Antworten - Zitieren - Direktlink - ]

22.07.2004, 12:18 Uhr

whose
Posts: 2156
Nutzer
*stirnklatsch* :lach:

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 8)

Grüße

[ - Antworten - Zitieren - Direktlink - ]

22.07.2004, 12:51 Uhr

gni
Posts: 1106
Nutzer
Zitat:
whose:
Ich bin viel zu verwöhnt von der Möglichkeit, den Suchpfad vorzugeben, merke ich gerade.

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.

[ - Antworten - Zitieren - Direktlink - ]

22.07.2004, 12:58 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von gni:
Zitat:
whose:
Ich bin viel zu verwöhnt von der Möglichkeit, den Suchpfad vorzugeben, merke ich gerade.

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.

Naja, das _Prinzip_ ist das Gleiche ;)

Aber trotzdem: Wieder was gelernt! Danke Dir :)

Grüße

[ - Antworten - Zitieren - Direktlink - ]

22.07.2004, 21:52 Uhr

Mazze
Posts: 263
Nutzer
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?

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 09:16 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Mazze:
7.Workbench:> dir env:path
Could not get information for env:path
Objekt nicht gefunden

Macht es Sinn sichmit c:dir ein datei anzuzeigen? Versuchs mal c:list env:path (oder nur env: aber dann geht auch dir :)
Zitat:
7.Workbench:> sh
# echo $PATH
/bin:/usr/bin:/usr/ucb

Das sieht nach den Satnadrdeinstellungen aus (also kein env:path)
Zitat:
Wie geht es weiter?
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.

[ - Antworten - Zitieren - Direktlink - ]

23.07.2004, 23:40 Uhr

Mazze
Posts: 263
Nutzer
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 %d\n", r);
  r = system("SYS:Tools/EditPad");
  printf("Rück %d\n", 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.

[ - Antworten - Zitieren - Direktlink - ]

24.07.2004, 12:01 Uhr

Palgucker
Posts: 1342
Nutzer
@ 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

[ - Antworten - Zitieren - Direktlink - ]

24.07.2004, 12:16 Uhr

Solar
Posts: 3680
Nutzer
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?

[ - Antworten - Zitieren - Direktlink - ]

24.07.2004, 13:43 Uhr

Palgucker
Posts: 1342
Nutzer
@ Solar

qoute:
Habt ihr evtl. kein sh installiert / eingerichtet?

Bingo :glow:

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. ]

[ - Antworten - Zitieren - Direktlink - ]

25.07.2004, 21:20 Uhr

Mazze
Posts: 263
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

26.07.2004, 00:49 Uhr

Palgucker
Posts: 1342
Nutzer
@ 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



[ - Antworten - Zitieren - Direktlink - ]

26.07.2004, 17:08 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Palgucker:
An ENV-Variablen scheint es nicht zu liegen, denn die werden (laut SnoopDos) garnicht erst abgefragt.

Ha, reingefallen! ixemul puffert env:, da das Auslesen eines Verzeichnisses langsam ist.
Zitat:
Benenne ich aber Editpad in sh um, bekomme ich zumindest den RC 5120 und die Fehlermeldung:
Falsche Anzahl an Argumenten

Was versuchst Du? Du kannst nicht ein beliebigen Programm sh nennen! ixemul ist eine _un*x Emulation_ und verhält sich entsprechend.
Zitat:
r = System("");
ändere, startet Editpad und öffnet die Datei -c.

Weil das Argument von system() an die sh per -c übergeben wird.
Zitat:
Also merkwürdig ist das schon, zumal man das aufzurufende Programm in sh umbenennen muss, ein alias reicht nicht.
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. ]

[ - Antworten - Zitieren - Direktlink - ]

26.07.2004, 17:14 Uhr

gni
Posts: 1106
Nutzer
[quote]
Palgucker:
Zitat:
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.

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:
Ich gehe mal davon aus, das Editpad aus Deinem Programm heraus immer noch nicht startet. Liegt das Verzeichnis Work:CProj/ im AmigaDos Suchpfad?
Der AmigaDOS Pfad ist für ixemul _irrelavant_. Bei einem absoluten Pfad ist der AmigaDOS Pfad auch bedeutungslos.

[ - Antworten - Zitieren - Direktlink - ]

26.07.2004, 20:04 Uhr

Palgucker
Posts: 1342
Nutzer
@ 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

[ - Antworten - Zitieren - Direktlink - ]

27.07.2004, 18:39 Uhr

obw
Posts: 94
Nutzer
Zitat:
Original von Mazze:

Ich habe auch schon probiert, statt der VNC-Shell die normale zu nehmen: keine Änderung.


Was hat der Consolen-Handler mit dem Pfad zu tun? Und warum hast Du nicht auch noch KingCON ausprobiert?

SCNR :lach:

OBW

[ - Antworten - Zitieren - Direktlink - ]

27.07.2004, 22:10 Uhr

Mazze
Posts: 263
Nutzer
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.


[ - Antworten - Zitieren - Direktlink - ]

28.07.2004, 09:24 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Mazze:
Jetzt gehts. Ich musste mit dem AmigaDos-Kommando "path" das Verzeichnis, in dem "sh" steht, einbinden.

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.

[ - Antworten - Zitieren - Direktlink - ]

01.08.2004, 11:07 Uhr

Mazze
Posts: 263
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > system / noixemul [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.