Pourquoi ce canal nommé n’imprime-t-il pas la ligne envoyée?

Le serveur suivant crée un canal nommé lorsqu’il est exécuté comme ceci:

./serverprogram -p nameofthepipe -t 99 

l’optarg après t indique un nombre de threads à créer (pas fait ici).

En tout cas, le tuyau ne fonctionne pas ici:

 /* Open the first named pipe for reading */ int rdfd = open(pipeName, O_RDONLY); /* Read from the first pipe */ int numread = read(rdfd, command_and_pid, 280); printf("what's being read is %s \n", command_and_pid); // not printing!!1! 

Pourquoi?

Programme serveur:

 #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  int main (int argc, char * argv[]) { char pipeName[30]; int numThreads; char command_and_pid[280]; int opcion; if (argc < 2) { printf ("ERROR: Missing arguments\n");// exit(1); } opterr = 0; while ((opcion = getopt (argc, argv, "p:t:w")) != -1) { switch (opcion) { case 'p': // -p indica el nombre del pipe printf("The name of the pipe is: %s\n",optarg); strcpy(pipeName, optarg); break; case 't'://-t indica los hilos printf("The number of threads is: %s\n",optarg); numThreads= atoi(optarg); break; case '?': fprintf(stderr,"no reconozco esa opcion\n"); break; } } int ret_val = mkfifo(pipeName, 0666); if ((ret_val == -1) && (errno != EEXIST)) { perror("Error creating the named pipe"); exit (0); } /* Open the first named pipe for reading */ int rdfd = open(pipeName, O_RDONLY); /* Read from the first pipe */ int numread = read(rdfd, command_and_pid, 280); printf("what's being read is %s \n", command_and_pid); // not printing!!1! close(rdfd); return 0; } 

Programme client:

 #include  #include #include  #include  #include  #include  #include  #include  int main (int argc, char * argv[]) { char pipeName[30]; printf("write the name of the pipe used to write to the server \n"); fgets(pipeName,30, stdin); /* Open the first named pipe for writing */ int wrfd = open(pipeName, O_WRONLY); printf("write the name of the command you want to execute \n"); char command_and_pid[280]; char command[250]; fgets(command,250, stdin); puts(command); //quitar strcpy(command_and_pid,command); strcat(command_and_pid," "); int pipeIntId; char pidssortingng [30]; int pid= getpid(); sprintf(pidssortingng,"%d", pid); strcat(command_and_pid,pidssortingng); int written; written=write(pipeIntId,command_and_pid,280); //write to the pipe // send the command and pid close(pipeIntId); // close write pipe return 0; } 

Dans le client, fgets conserve la nouvelle ligne à la fin de la ligne, vous devez donc la supprimer avant d’ouvrir le fichier.

De plus, dans le code comme indiqué, vous ouvrez wrfd mais en écrivant dans pipeIntId , qui n’est pas initialisé (même si vous pipeIntId quelque chose d’une fonction ici).