Not logged in. · Lost password · Register

Page:  1  2  next 
vidic
Member since Mar 2004
14 posts
Subject: Programmieraufgabe 2001
Hallo ihr,

ich sitze grad vor der Klaisuraufgabe 2001 und weiß nicht genau wie man dan SIGCHLD-Handler blockiert un deblockiert. Also ich wei, dass man was mit sigprocmask() machen muss. Aber wie genau? Kann mir da jemand helfen :finger: ?
Vielen Dank und allen noch viel Erfolg beim Lernen!
linqs
Avatar
Member since Oct 2002
71 posts
Subject: sigprocmask
int sigBlock(int sig) {
    sigset_t sigtempset;
    sigemptyset(&sigtempset);
    sigaddset(&sitempset, sig);
    return sigprocmask(SIG_BLOCK, &sigtempset, NULL);
}
bzw.
int sigUnBlock(int sig) {
    sigset_t sigtempset;
    sigemptyset(&sigtempset);
    sigaddset(&sitempset, sig);
    return sigprocmask(SIG_UNBLOCK, &sigtempset, NULL);
}
was das signal mit signalnummer sig blockiert bzw deblockiert!
uoeh
vidic
Member since Mar 2004
14 posts
Thanx
Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
@q: sauber!
das ist mal uebersichtlicher und vielseitiger c-code (auf welchen ich nie kommen wuerde :[).
Eem
staatl. geprüfter Peppeneulenprüfer
Avatar
Member since Oct 2002
435 posts
undwas wenn sigemptyset/sigaddset nen fehler liefert??
linqs
Avatar
Member since Oct 2002
71 posts
Subject: abfagnen
dann haman an dreck im schachtal
This post was edited on 2004-03-12, 19:09 by linqs.
Eem
staatl. geprüfter Peppeneulenprüfer
Avatar
Member since Oct 2002
435 posts
bitte?
 :wand:
Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
die bringen keine fehler.
ich hab das zwar auch mal in irgendeiner aufgabe abgefragt, aber das ist totaler nonsense...
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
In reply to post #5
Quote by Eem:
undwas wenn sigemptyset/sigaddset nen fehler liefert??

  1. int i;
  2. if ((i = 4) == -1)
  3. {
  4.     perror("Wert konnte der Variablen nicht zugewiesen werden");
  5.     exit(1);
  6. }
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
LOL!
Tuttl
Avatar
Member since Sep 2003
170 posts
Wie schaut bei euch da das Verbindung bearbeiten aus und wie macht man das mit dem EXIT-Status?

Stimmt das so ungefähr:?
while{
    read (fd, buffer,strlen(buffer);
    if (!strcmp (buf, "exit"))....;
    entry == readdir(buffer)
    sprintf("%s : %d\n", buf , entry->d_size)
    write(fd, res, strlen(res)...

Hab jetzt mal die ganzen Fehlerabfragen weggelassen.
chiwil
Member since Feb 2004
4 posts
Subject: progr. aufg juli 2001
progr. aufg juli 2001:
hab noch probleme mit meinem code.kann mir jemand weiterhelfen bei der traverse_dir() function und run_command() zwar hier:

while (( entry = readdir (dir)) != NULL)
{
   if(entry->d_name[0] == '.') {
          continue;
   }

/* Aus jedem Verzeichniseintrag wird zusammen mit aktuellen Verzeichnisnamen ein kompletter path-Name gebildet. Path_namen, welche länger als MAX_PATH sind, werden überspungen */
*
  • code
*
/* Mit dem kompletten Path-namen ist der dateistatus abzufragen. handelt es sich bei dem Verzeichniseintrag um ein Verzeichnis so wird die funktion
TRAVERSE_DIR rekursiv aufgerufen, bei einer regulären Datei wird RUN_COMMAND aufgerufen, symbolische Links werden nicht verfolgt. */

was sind eigentlich bei run_command: arguments[0], arguments[1], arguments[2]
Tuttl
Avatar
Member since Sep 2003
170 posts
ja du bastelt dir danach den Pfadnamen zusammen(also mit strcat)
Nimmst also den Verzeichnisnamen,hängst mit strcat den "/" ran und danach mit strcat dein entry.d_name.
Jetzt musst du nnur noch mit if abfragen ob strlen von Pfadnamen> MAX_PATH.
Also so ungefähr:
pathname = strcat (dir_name , "/");
         strcat (pathname, entry.d_name);   /*jetzt hast du den gesamten                 Pfadnamen*/
       if ((strlen (pathname))>MAX_PATH)
    continue;

Der Code müsste ungefähr so ausschauen.Aber nagelt mich nicht fest!
DerSchlumpf
Heute: Peter programmiert ...
Avatar
Member since Jan 2004
30 posts
In reply to post #11
Quote by Tuttl:
while{
    read (fd, buffer,strlen(buffer);
    if (!strcmp (buf, "exit"))....;
    entry == readdir(buffer)
    sprintf("%s : %d\n", buf , entry->d_size)
    write(fd, res, strlen(res)...

sorry, da stimmt so fast nix.

read gibt ja was zurück.
buf oder buffer?
buffer braucht noch ein '\0' bevor du damit string-ops drauf kannst

entry == readdir(buffer)? das ist ein vergleich und muss man nicht voher überprüfen ob es ein verzeichnis ist und das verzeichnis öffnen, um es auszulesen?

die größe bekommst du aus einem struct stat, nicht aus dem verzeichnis eintrag

jo
Löwenzahn - auch auf www.winfau.de
DerSchlumpf
Heute: Peter programmiert ...
Avatar
Member since Jan 2004
30 posts
In reply to post #12
Quote by chiwil:
was sind eigentlich bei run_command: arguments[0], arguments[1], arguments[2]

je nachdem welches exec du benutzt brauchst du andere argumente. execvp will als zweites argument ein array

arguments[0] der auszuführende befehl
arguments[1] ein parameter für den befehl, vielleicht ein dateiname?
arguments[2] NULL

siehe auch manpage execvp

jo
Löwenzahn - auch auf www.winfau.de
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Page:  1  2  next 
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen