supertux schrieb:
Das liegt aber am system() Funktionsaufruf. System macht einen fork() und im Kindprozess wird execlp aufgerufen.
Da muss ich Dich leider korrigieren: system() startet eine Shell (im Regelfall die bash ) und führt in dieser die Kommandozeile aus.
Anmerkung: Seit der bash2 wird von der Shell automatisch das S-Bit gelöscht, sodass ein Programm mit gesetztem S-Bit und Root-Rechten in dem mit system() ausgeführten Programm keine Root-Rechte mehr hat.
Danke Jungs,
ich werde mir mal alles über die Sockets noch ein bisschen genauer reinlesen und versuch dann mein Glück...
Danke Euch..
ich hole euch zur Hilfe sobald ich dann wieder im niemandsland stecke
Nabend,
du hast 0 Fehlerueberpruefung drin. Warum machst du keine Fehlerueberpruefung?
Dein connect wird schonmal fehlschlagen, weil dest_addr in keinster Weise
initialisiert ist bzw. wenn du viel Glueck hast, ergibt die Bitrepraesentation
sogar irgend einen Sinn. Selbstverstaendlich wird send dann entweder Fehl-
schlagen, wenn connect schon fehl schlug, oder es wird u. U. nichts verschicken
koennen. Dann bleibt dein Programm bei send stehen, weil du blockierende
Sockets verwendest.
gruss
v R
Nein, die Typen AF_INET und AF_UNIX sind nicht identisch (verdammte Axt :D) (und wo von Unterschieden zwischen Windows und Linux die Rede war, sehe ich auch nicht)
Und was die Sonderrolle angeht, nunja, eigentlich sind alle Sockets nach oben hin gleich. Sie haben eine Kennung (PF_*), eine dazugehörige Adresse (INET -> sockaddr_in, UNIX -> sockaddr_un, INET6 -> sockaddr_in6), einen Typ (Stream, Datagram, Raw, ...), bei Verbindungsorientierung zwei Endpunkte (bind und connect) usw. Dass eine Adresse ohne "Hausnummer" eine Sonderrolle darstellt, ist nirgendwo definiert
@Fabeltier:
Das urspr. Problem hat sich also erledigt?
Servus,
Es geht um folgendes:
Ich muss Scheudler so modifizieren, dass er alle fehlgeschlagene Signale beim Senden an eine Prozess per printk ausgeben lassen? Hat jemand eine Idee?
Viele Grüße
Strong
Ok dass es Ip_tables gibt wusste ich auch ..
Ich meinte wenn ich direkt eine FireWall schreiben will also eine Art Kernel Modul
ohne hilfe von zB netfilter .
Werde mir mal Source von Ip-Tables anschauen.
wenn du das makefile öffnest, bist du im Makefile-Verzeichnis, und kannst dann natürlich auch von dort aus make nutzen. Wie man Projektordner anlegt ist mir nicht bekannt, das geht glaub ich auch gar nicht.
es wäre natürlich auch möglich jeweils ich src1 und zwei eigene makefiles zu erstellen.
Jo. Du musst das Hauptprogramm soweit es notwendig ist als Bibliothek auslagern und dagegen linken.
Alternativ kannst du dem subprogramm einen Funktionspointer übergeben.
ok danke erstmal, das funktioniert jetzt soweit ohne fehler.
was mich allerdings verwundert ist, dass wenn ich nach Aufruf der Funktion mit einfach den inhalt von filecontent ausgeben lassen will ich nur 5 leere Zeilen erhalte (filecount ist 5 derzeit)
hier der code nach readFile
while (i < filecount) {
printf("%s\n", filecontent[i]);
fflush(stdout);
i++;
}
wie gesagt jetzt hab ich in der konsole dann nur 5 leere Zeilen stehen und weiß nicht woran das liegen könnte..
OberGuru schrieb:
Es gibt gewisse Thread-Limitierungen unter Linux/Unix.
Beispielsweise MAX_Threads pro Process.
Das sind aber meistens "nur" vordefinierte Kernel-Limitierungen, die man mit einem entsprechenden Recompile lösen kann. Nicht zu vergessen, das jeder Thread den Scheduler belastet. Ich glaube momentan stößt Linux bei ca. 2^18 Threads an Kapazitätsgrenzen ( Komplexität des Schedulers ).
Aber so viele braucht ja eh kein Mensch ...
Ja solche Limitierungen gibt es. Max_Threads ist aber nur ein Richtwert.
Unter Linux wird der tatsaechliche Maximalwert nur durch den physikalisch
vorhandenen Speicher eingeschraenkt. Zusaetzlich gibt es die Moeglichkeit,
einen vordefinierten Wert auszulesen und zu aendern:
cat /proc/sys/kernel/threads-max
respektive
echo 10000 > /proc/sys/kernel/threads-max
Unter BSD gibt es dafuer das sysctl kern.threads.max_threads_per_proc,
welches man mit sysctl entsprechend auslesen und setzen kann.
gruss
v R
Stichwort: ncurses
Wie es mir scheint, macht ihr da was auf der Console. Andernfalls such mal nach ANSI Escape Sequenzen. Zu beidem solltest du genug Infos im Forum und im Internet finden.
Fabeltier schrieb:
Vorden schrieb:
mit pipe afaik gar nicht, müsstest schon ne Named Pipe verwenden, mit denen geht das Ganze dann schön.
Named pipe? Kannst Du mir ein Beispiel geben, oder einen Link dazu? Danke
Named Pipes sind auch als FIFOs bekannt:
schaumal man 3 mkfifo, man 2 mknod und hier: http://tldp.org/LDP/lpg/node15.html
im prinzip legst du zwei special files an (die named pipes oder FIFOs). Der eine
Prozess schreibt in die eine pipe und liest aus der anderen. Der andere Prozess machts umgekehrt. Very simpel
zu 1)
Mhh. So direkt habe ich keinen Link. Du könntest z.B. ähnlich dem IRC Protokol den Server eine Nachricht an alle Clients verschicken lassen. Kommt nichts zurück ist der Client für den Server tot.
Das machst du x Sekunden (oder Millisekunden).
zu 2)
Keine Ahnung
zu 3)
Stichwort: Thread- bzw. Prozess-Pool.
Soweit ich das noch richtig weiß, ist select + Threads keine gute Idee (select besitzt statische Variablen; das gibt Chaos).
Versuch es mit einem Prozess-Pool (z.B. 5 Prozesse beim Start erzeugen) + select.
Bei 100 Leuten sollte es eigentlich auch nicht problematisch sein nur einen Prozess zu haben. Für den Chat dürfte das reichen.
Das Socket-Buch von http://www.zotteljedi.de/ find ich eigentlich ganz gut.