Autor |
Beitrag |
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 21.06.03 02:58
Ja Leute, die Frage steht in im Titel. Sorry, aber ich fange gerade mit Kylix an.
Moderiert von tommie-lie: Überflüssige Beiträge entfernt
_________________ Popov
|
|
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 21.06.03 02:59
EDIT //
Da von tommie-lie die überflüssige Beiträge entfernt wurden, ist der ganze Witz der Bemerkung dahin, da sich der Text auf die entfernten Beiträge bezog. Da die Bemerkung ohne die Beiträge schwachsinnig klingt, hab ich auch die Bemerkung entfernt und nur noch den Code gelassen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| uses ..., Libc;
...
procedure TForm1.Button1Click(Sender: TObject); begin if Libc.system('konqueror') = -1 then ShowMessage('Konnte Programm nicht starten.'); end; |
System in system verändert
_________________ Popov
Zuletzt bearbeitet von Popov am Do 24.07.03 20:16, insgesamt 2-mal bearbeitet
|
|
AndyB
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Sa 21.06.03 10:37
Popov hat folgendes geschrieben: | Delphi-Quelltext 1:
| Libc.System('konqueror') | |
Und wenn du dich an die Groß-/Kleinschreibung der Libc Befehle halten willst, sollte es Libc.system() lauten. Das ist keine Kritik. Wie man seinen Code schreibt, ist einem selbst überlassen. Aber C Programmierer sind da peniebler.
Es gibt auch noch Funktionen wie Libc.popen, Libc.fork & Libc.execXX.
_________________ Ist Zeit wirklich Geld?
|
|
Popov
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 21.06.03 14:55
Guter Hinweis. Allerdings ist es Pascal (nicht C) und somit ein wenig egal. Andererseits sollte man sich vor Augen halten, daß es Linux ist und bei Linux ist Groß-/Kleinschreibung nicht egal. Also sollte man sich immer Bewußt sein, wie man etwas schreibt. Da bei Windows-Delphi sowas egal ist, könnte man auf die Idee kommen, daß es Linux-Delphi auch vieles andere egal ist.
Was allerdings schlimmer wäre (ich hab übrigens den Code komplett ins Feld getippt und nicht kopiert) ist, daß es bei Dateinamen nicht egal ist. Das würde also weniger funktionieren:
Libc.system('Konqueror'); // Dateiname ist groß
Mehr zufällig als mit Absicht drann denkend, hab ich den Dateinamen klein geschrieben. Das wäre weniger egal.
Allerdings ist es hier egal ob es Libc.system() oder Libc.System() heißt. Wenn es aber zum guten Ton gehört es klein zu schreiben, dann werde ich es schwer haben mich drann zu gewöhnen.
_________________ Popov
|
|
BeniSchindler
Beiträge: 82
Win 2k / suse9.1
D7 Prof / Kylix 3
|
Verfasst: Fr 04.07.03 14:44
Bei den Prozedur aufrufen ist die Groß/Kleinschreibung auch egal.
Das wichtige ist jedoch, dass in der USES-class die Groß/Kleinschreibung beachtet wird. Ansonsten findet er die Units nicht.
_________________ Result := 42; Application.ProcessMessages;
|
|
yellomb
Beiträge: 21
D6
|
Verfasst: Di 06.01.04 13:16
Also bei mir tut sich mit: Libc.System('konqueror');
ganichts, obwohl ich Libc in der uses eingebunden hab, hat jemand ne Ahnung woran das liegt
|
|
Lhid
Beiträge: 831
|
Verfasst: Di 06.01.04 13:30
Meinung und mich grundlegend geändert-> alte beiträge gelöscht
Zuletzt bearbeitet von Lhid am Sa 26.09.09 14:43, insgesamt 1-mal bearbeitet
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Di 06.01.04 13:41
Schöner Tipp, aber ich glaube nicht, daß das yellombs Problem ist, denn er sagt, es würde isch gar nichts tun. Linux ist schon so fortschrittlich und sagt dir, daß es die lib(bor)qt nicht findet
@yellomb: Hast du denn den Konqueror überhaupt installiert? Wenn du KDE nicht installiert hast, kann es durchaus sein, daß du den konquerer gar nicht hast. Wenn du Gnome (ab Version 2) benutzt, könntest du z.B. versuchen den nautilus zu laden ( Libc.system('nautilus'); ) oder ein anderes Programm (vielleicht yast bei SuSE, linuxconf bei RedHat oder eben ein anderes Programm, von dem du weißt, das es da ist. Zur Not auch Kylix selbst, "startkylix" ist hier das Startscript deiner Wahl).
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
NetZwerg
Beiträge: 448
Slackware 10.1
Kylix 3, D5 Standard
|
Verfasst: Mi 01.06.05 15:22
hurra, ich bin auch mal wieder da
bei mir geht es auch nicht, weder mit 'konqueror' noch mit '/opt/kde/bin/kwrite' oder so.
_________________ "Manche Leute drücken nur deshalb ein Auge zu, damit sie besser zielen können."
Billy Wilder, amer. Filmregisseur
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 01.06.05 19:28
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
rap86
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 01.06.05 20:00
wenn ich
irgendetwas mit system starten will
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin system('konqueror'); end; |
krieg ich folgende Fehlermeldung:
Quelltext 1:
| unit1.pas(125,12) Fatal: Syntax error, "." expected but "(" found |
wieso? was ist an dem Aufruf falsch?
ps: Libc is unter Uses eingetragen.
mfg
RaP86
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 01.06.05 20:14
Du musst "Libc.system()" schreiben. So erkennt Kylix es als den Unit-Specifier "system", der die implizit eingebundene system.pas wiedergibt. Und Unit1(blubb) kannst du ja auch nicht als Funktion aufrufen
(Ich weiß schon, warum ich C mag... keine Compiler Magic )
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
rap86
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 01.06.05 20:21
|
|
NetZwerg
Beiträge: 448
Slackware 10.1
Kylix 3, D5 Standard
|
Verfasst: Mi 01.06.05 21:23
@tommie-lie:
ja c funktioniert bei mir auch, aber in kylix gehts halt nich!
_________________ "Manche Leute drücken nur deshalb ein Auge zu, damit sie besser zielen können."
Billy Wilder, amer. Filmregisseur
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 01.06.05 21:36
rap86 hat folgendes geschrieben: | ps: ich benutz nich kylix, da ich einen 2.6.8 kernel hab und das dauernd abstürzt, sondern lazarus mit fpc
deswegen sehen die fehlermeldungen etwas anders aus... |
Tja, mein Beileid. Durch die verkrüppelte FPC-Implementierung der Libc bin ich noch nicht durchgestiegen. Ich weiß auch noch nicht, welche Droge ich nehmen muss, um das überhaupt zu tun, geschweige denn welche der Autor des Dings genommen hat, um es überhaupt zu schreiben.
Daher kann ich dir leider nicht sagen, was FreePascal da gerne als Argumente hätte (die Tatsache, daß er nach "libc.system" aber gerne ein Semikolon hätte und keine Klammer, lässt darauf schließen, daß es sich bei libc.system um etwas anderes handelt, als die Funktion aus der glibc.so, wie man es eigentlich erwarten würde.
Irgendeiner (war es hier oder in der Delphi-Praxis? ) wollte mir mal erzählen, daß man bei Pascal gefälligst nicht die Standard-Bibliotheken zu nutzen hat, die überall vorhanden sind, sondern irgendwelchen proprietären Fummelkram, vielleicht findest du im Freepascal-Forum entsprechende Mit-Frickeler.
Kleiner Tipp: Von einem anderen Programmierer weiß ich, daß der Kommandozeilencompiler von Kylix auch auf einem 2.6er-Kernel funktioniert. Ich weiß nicht, welche IDE er benutzt, aber den Compiler setzt er erfolgreich auf einem 2.6er-Kernel ein und er kompiliert damit sein Projekt Tux Commander erfolgreicher als ich meinen angestrebten FreePascal-Port vom gleichen Programm.
@NetZwerg: Deswegen wollte ich ja auch den Rückgabewert von libc.system() wissen Evtl auch mal stderr auf die Konsole (oder in eine Datei) umleiten und die posten. Vielleicht verrät auch der Kylix-Debugger ein paar Fehlermeldungen. Hast du evtl auch ein System mit 2.4er-Kernel (und dazu passender älterer glibc) zur Verfügung, auf dem du es mal ausprobieren könntest?
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
rap86
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 01.06.05 21:54
mh... das is *mist*e
ich versuch mal irgendwen im freepascalforum zu fragen... bisher liefs eigentlich ziemlich gut damit...
nur seit ich vorgestern angefangen hab mit systembefehlen zu arbeiten krieg ich ne tierisch menge fehler die ich ehrlich gesagt nicht verstehe...
ps: da gibs son schönes Element Process1:TProcess.... da kann man nen command angeben und wenn man das element auf true setzt führt der den befehl sogar aus... frag is nur wie ich jetzt den output vom program in mein program reinkriege. process1.output gibbet, aber der hat als ausgabe TInputPipeStream ich hab ka wie ich das in einen String umwandle damit ich das in ein memo ausgeben kann... kannst du mir da eventuell helfen??
mfg
Patrick
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 01.06.05 22:09
rap86 hat folgendes geschrieben: | nur seit ich vorgestern angefangen hab mit systembefehlen zu arbeiten krieg ich ne tierisch menge fehler die ich ehrlich gesagt nicht verstehe... |
Ja, habe ich auch gemerkt, und genau aus dem Grund (und weil der Linker schlichtweg zu schlecht ist (anders kann man's schon gar nicht mehr nennen)) bevorzuge ich bei der systemnahen Programmierung C. Kylix hat da nämlich ganz andere Macken.
rap86 hat folgendes geschrieben: | ps: da gibs son schönes Element Process1:TProcess.... da kann man nen command angeben und wenn man das element auf true setzt führt der den befehl sogar aus... frag is nur wie ich jetzt den output vom program in mein program reinkriege. process1.output gibbet, aber der hat als ausgabe TInputPipeStream ich hab ka wie ich das in einen String umwandle damit ich das in ein memo ausgeben kann... kannst du mir da eventuell helfen?? |
Theoretisch würde ich sagen, daß es eine gewöhnliche Pipe ist. In dem Fall wäre es so, daß du wie auf eine Datei zugreifst, also liest du den String wie aus einer Textdatei per TFileStream unter Delphi: Speicher für den String allokieren und einfach lesen. Dazu gibt es hier im Forum Beispielcode ( "TFILESTREAM STRING LESEN" sind da die Stichworte ). Allerdings weiß ich nicht, wie du in dem Fall an die Länge des Stream kommst. Das hängt davon ab, ob der Stream der Pipe erst gefüllt wird, nachdem der Prozess wieder beendet wurde, dann steht die Länge der Ausgabe fest. Andernfalls vergrößert sich der Stream ständig und du musst dir ein geeignetes Leseverfahren überlegen, um an eine dynamische Menge an Zeichen zu kommen.
Aber bei der FPC-RTL bin ich mir über die saubere Implementierung nicht so sicher
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
rap86
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 02.06.05 11:29
Kannst du mir eventuell mal ein kurzes Beispiel machen?
Ich werde irgendwie aus den Beispielen nicht schlau :S
thx
Patrick
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 02.06.05 12:35
rap86 hat folgendes geschrieben: | Kannst du mir eventuell mal ein kurzes Beispiel machen? | Klick
Das ist zumindest das Prinzip. Aber wie gesagt, ich weiß nicht, ob TInputPipeStream.Size in der FPC-RTL vernünftige Werte enthält, oder wann der Stream mit Daten gefüllt wird.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
rap86
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 02.06.05 18:26
danke für die hilfe... es läuft
thx
mfg
patrick
|
|