Hmm also irgendwie mag der bei mir nicht.. Ich will einen TEIL eines Speicherbereichs an eine Datei anfügen, die ggf. erzeugt wird... das sollte möglichst schnell gehen.
Hat jemand sowas schonmals gemacht? Irgendwie mag der bei mir nicht so wie ich will.
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
sollten aber auch keine CR mehr "verschwinden"
Aus irgendeinem Grund, tun sie es trotz c_iflag=0.
Wie ich mittlerweile herausgefunden habe, muss das Problem mit verschwundenen CRs ziemlich tief im System versteckt. Er tritt bei mir dann auf wenn es Kombination aus einem RS232-USB-Converter und GTK gibt. Total rätselhaft dieses Problem.
Ich habe dieses Problem so umgangen, indem mit clone() ein neuer Prozess gestartet wird, und in diesem neuen Prozess alles was mit Empfang der Daten zu tun hat gemacht wird.
Seltsamerweise in einem neuen Prozess funktioniert es einwandfrei, CRs Bytes verschwinden nicht.
Dr. C++ schrieb:
Sorry, dass ich vergessen hab, das zu sagen: ich arbeite mit Klassen. Das mitgegebene Argument für den Thread brauch ich um wieder in die Serverklasse zurückzukommen. Damit funktioniert der Code leider nicht .
Dann leg einfach eine neue Klasse an:
struct ThreadData {
void * anything;
Data * data;
};
Und gib einen Zeiger auf ein solches Element weiter. Dann kannst du den bisherigen Wert in anything speichern.
Okey, wieder einmal danke an supertux!
Das mit den Makefiles ist auch wieder so eine Sache. Gibt so viele Dinge, in die man sich einlesen muß.
Jetzt nur noch eine Frage:
Bei dem Makefile von dir, wird die Architektur und Crosskompilierung nicht berücksichtigt. Reicht es aus, wenn ich dann wieder
ARCH := ppc
CROSS_COMPILE := /opt/crosstool/bin/powerpc-405-linux-gnu-
mit in das Makefile eintrage???
Nun gut. Ich habe inzwischen ein bischen was selbst rausgefunden.
Für alle die es interessiert: misc_register ist eine spezielle Funktion, die immer die Majornummer 10 belegt.
pyjamaboy schrieb:
Danke hat sich nun erledigt.
Habe nun einen Zeiger auf den Start des Speicherbereichs und aufs Ende...
startaddr = headerIndexSize + header.readindex * frameSize;
size = frameSize*(header.writeindex - header.readindex);
ptr_first = (FRAME_SHM_ELEMENT*) startaddr;
ptr_last = (FRAME_SHM_ELEMENT*)(startaddr+size);
write(fr, ptr_first, size);
So wie das da steht sieht aber startaddr nicht wie ein Zeiger sondern wie ein Index aus. Ich würde da eher so etwas erwarten:
startaddr = header + headerIndexSize + header.readindex * frameSize;
Wäre sinnvoll gewesen, kurz zu erklären, was CRITICAL_SECTION unter Windows macht; viele Leute (darunter ich) haben davon bestimmt keinen blassen Schimmer.
Thanks for your information. But just yet I find out how to handle my problem. qmake also generates me a .pro file before it generates me the Makefile. The .pro file is much easier to understand and to configure by a "human being".
So today I find out how to fill up this .pro file correctly with the PSJIP specific Includes and Libraries.
My Profile looks like this at the moment:
######################################################################
# Automatically generated by qmake (2.01a) Thu Apr 12 15:03:47 2007
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += . src
INCLUDEPATH += . src
LIBS += -L/home/user/pjproject-0.5.10.2/pjlib/lib
LIBS += -L/home/user/pjproject-0.5.10.2/pjlib-util/lib/
LIBS += -L/home/user/pjproject-0.5.10.2/pjmedia/lib
LIBS += -L/home/user/pjproject-0.5.10.2/pjsip/lib
LIBS += -lpjsua-i686-pc-linux-gnu
LIBS += -lpjsip-ua-i686-pc-linux-gnu
LIBS += -lpjsip-simple-i686-pc-linux-gnu
LIBS += -lpjsip-i686-pc-linux-gnu
LIBS += -lpjmedia-codec-i686-pc-linux-gnu
LIBS += -lpjmedia-i686-pc-linux-gnu
LIBS += -lpjmedia-codec-i686-pc-linux-gnu
LIBS += -lpjlib-util-i686-pc-linux-gnu
LIBS += -lpj-i686-pc-linux-gnu
LIBS += -lm -lnsl -lrt -lpthread
INCLUDEPATH += /home/user/pjproject-0.5.10.2/pjlib/include
INCLUDEPATH += /home/user/pjproject-0.5.10.2/pjlib-util/include
INCLUDEPATH += /home/user/pjproject-0.5.10.2/pjmedia/include
INCLUDEPATH += /home/user/pjproject-0.5.10.2/pjsip/include
# Input
HEADERS += src/uscgui.h
SOURCES += src/uscgui.cpp src/uscinterface.cpp
And it works with this configuration.
Thanks for your help!
Best Regards,...
Außerdem könnte es noch zu Problemen kommen, da sich beim GCC die C++ ABI öfter mal geändert hat. Du könntest also die stdc++ statisch linken (http://www.trilithium.com/johan/2005/06/static-libstdc/) und nur C Bibliotheken dynamisch linken, da die C ABI schon seit Ewigkeiten stabil ist, sollte es damit keine Probleme geben.
BlackPepper schrieb:
LordJaxom schrieb:
Du brauchst gprof normalerweise garnicht sagen, dass es ein Argument an das Programm weitergeben soll, denn gprof startet das Programm nicht, sondern wertet einen zuvor ausgegebenen Callgraph aus. Dieser wird automatisch zur Laufzeit erzeugt, wenn das Programm mit -pg kompiliert (und gelinkt) wurde.
Heißt das, das ich das Programm ganz normal mit
programm -a
aufrufe und anschließend gprof aufrufe?
Gruß
M. Incai
Ganz genau! Und beim Kompilieren des Programmes musst du -pg mitgeben, sonst wirds nicht klappen.
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Ihr scheint da ja echt viel mehr zu wissen als wir.
Also:
Wir istallieren eine distribution
Wir installieren alle packete
Machen wir aus dem ganzen eine iso
Hab ich das richtig verstanden?
Wo werden da programmierkenntnisse erforderlich?
Wie steckt man die ganze sistri in eine iso?
Wie kommt der installer dazu?
Alles was du brauchst:
gentoo 1.2006 livecd
gutes linux buch
IRC
nen neu rechner (bei dir würd n kde ~20 stunden brauchen)
langeweile
und/oder
fedora (bin fan von yum)
gutes linux buch
beryl
berton schrieb:
okey, nochmal danke Supertux!
Habe das Forum hier jetzt erst gefunden. Scheint etwas mehr los zu sein.
Ja, hier ist immer mehr los, leider auch mit den Trollen
berton schrieb:
Inzwischen habe ich das mit der Crosskompilierung hinbekommen.
Dazu mein Makefile
na siehst du? Es war nicht so schwer hinzukriegen. Ich habe Linux nie mit Crosscompiler kompilieren müssen, deswegen wusste ich nicht auf anhieb, was man an der Makefile ändern muss. Meistens genügt es die CC Variable zu ändern und vielleicht auch die CFLAGS (-march=... oder -<arch spezifisches Flag> oder was weiß ich). Dann hättest du die Variable EXTRA_CFLAGS gebraucht.
Lies dir <linux source Code dir>/Documentation/kbuild durch
Da sind Beispiele, wie man die Makefiles schreibt. "The kernel build system is a complex beast" [1]
Gruss
Pablo
[1] LDD3 Seite 23
Es ist logisch, dass i immer =3 ist!
In jedem deiner Kind-Prozesse wird die while-Schleife solange durchlaufen, bis i=argc ist.
Die switch()-Anweisung müsste direkt hinter dem fork() erfolgen, dann sollte es gehen.
Der zweite Fehler ist, dass du der Variable ppid nur einmal am Anfang einen Wert zuweist. Dieser ist für alle Kindprozesse dann gleich!!!
Lösung (ohne, dass ich es getestet habe):
while (i < argc)
{
pid = fork();
switch (pid)
{
case 0: /* Kind-Prozess */
[i]Datei öffnen usw.[/i]
return(0); /* Kind-Prozess beenden!!! */
case -1:
perror("Fehler bei fork()");
return(-1);
default: /* Vater-Prozess */
i++;
}
}