Pages: [1]   Go Down
Print
Author Topic: Piccolo chiarimento su una funzione  (Read 2137 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« on: 19-02-2009, 16:31:38 »

Scusate, volevo sapere un'informazione riguardo questo codice della funzione mycp.c:
Quote
#include <fcntl.h>         // defines O_RDONLY, O_BINARY
#include <stdlib.h>         // exit prototype
#include <stdio.h>         // fprintf prototype

#ifdef Linux
#define O_BINARY 0         // unknown open flag under Unix
#include <unistd.h>         // system calls (incl. read/write) prototypes
#endif

#ifdef Dos
#include <io.h>            // read/write prototypes
#endif

#define MODE 0666         // Unix: rw- rw- rw-
#define BUF_SIZE 4096


int main(int argc, char * argv[])
{
   char buf[BUF_SIZE];

   int src, dst;
   int n_in;
   int code;

   if (argc != 3) {
      fprintf(stderr, "Usage: %s src dst\n", argv[0]);
      exit(1);
   }
   if ( (src = open(argv[1], O_RDONLY | O_BINARY)) < 0 ) {
      fprintf(stderr, "Cannot open input file %s\n", argv[1]);
      perror("Opening source file");   // perror() stampa il diagnostico
      exit(2);
   }
#ifdef Dos
   _fmode = O_BINARY;   // DOS
#endif
   if ( (dst = creat(argv[2], MODE)) < 0 ) {
      fprintf(stderr, "Cannot create file %s\n", argv[2]);
      perror("Creating destination file");
      exit(3);
   }

   code = 0;   // arg for final exit()
   do {
      if ( (n_in = read(src, buf, BUF_SIZE)) < 0 ) {
         code = 4;
         perror("Reading");
         break;
      }
      if (n_in == 0)   // finished
         break;
      if ( write(dst, buf, n_in) < 0 ) {
         code = 5;
         perror("Writing");
         break;
      }
   } while (1);

   close(src);
   close(dst);
   exit(code);
#ifdef Dos
   return(0);      // only to avoid bcc's warning
#endif
}
Cosa fa tale programma? Grazie delle risposte
Logged
ga2486
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 204



« Reply #1 on: 19-02-2009, 17:14:24 »

La funzione mycp.c dovrebbe essere l'implementazione di una funzione che copia un file sorgente (src) in un altro file destinatario (dest). 
Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #2 on: 19-02-2009, 18:19:55 »

grazie tante... metto un'altro codice
Quote
/*
 * signal1.c
 */

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>


int trap = 0;

int main(void)
{
   void (*prec_int)(int), new_int_trap(int);

   prec_int = signal(SIGINT, &new_int_trap);   // SIGINT (^C) [-2] termina
   signal(SIGTERM, &new_int_trap);   // SIGTERM (kill [-15] non fara' terminare
   signal(SIGKILL, &new_int_trap);   // Non serve, SIGKILL [-9] non gestibile
   while (!trap)
      ;
   exit(0);
}

void new_int_trap(int signum)
{
   printf("SIGINT=%d ", SIGINT);     // print these 3 lines as
   printf("SIGTERM=%d ", SIGTERM);   // memo for user
   printf("SIGKILL=%d\n", SIGKILL);
   printf("Ho ricevuto il segnale n. %d\n", signum);
   if (signum == SIGINT)
      trap = 1;
}
Quote
/*
 * trynice.c
 */

/* NB: priorita` negative permesse solo a root */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

#define DELAY 3


int more = 1;

void alarm_trap(int signum)
{
  more = 0;
}

int main(int argc, char * argv[])
{
  unsigned long int i;
  int nice_val;

  if (argc != 2) {
   printf("Usage: %s priority\n", argv[0]);
   printf("          [-20..19] (neg only for root)\n");
   exit(-1);
  }
  signal(SIGALRM, alarm_trap);

  if (fork() == 0) {
    /* child process */
    nice(nice_val = atoi(argv[1]));
   alarm(DELAY);
    for (i = 0; more ; i++) ;
   printf("\t\t\t\t\tnice=%d, i=%ld\n", nice_val, i);
  } else {
    /* parent process */
   alarm(DELAY);
    for (i = 0; more ; i++) ;
   printf("i=%ld\n", i);
  }
  return 0;
}
questi due cosa vogliono dire? Grazie ancora
Logged
IRon
Matricola
*
Offline Offline

Posts: 84



« Reply #3 on: 19-02-2009, 19:20:04 »

Guarda che non è sufficente sapere "cosa vogliono dire" quei programmi,all'orale ti sarà chiesto di implementare del codice, il che richiede una minima conoscenza delle chiamate di sistema: studiale e sarai in grado di capire il funzionamento di quei programmi.
Logged
Pages: [1]   Go Up
Print
Jump to: