amiga-news 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:
Original von Mazze:
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?

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* :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

[ - Answer - Quote - Direct link - ]

2004-07-22, 12:51 h

gni
Posts: 1106
User
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.

[ - Answer - Quote - Direct link - ]

2004-07-22, 12:58 h

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

[ - 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:
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.

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

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

[ - Answer - Quote - Direct link - ]

2004-07-26, 17:14 h

gni
Posts: 1106
User
[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.

[ - 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:
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

[ - 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:
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.

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