Académique Documents
Professionnel Documents
Culture Documents
h>
/*
programme ​ print.c qui affiche à l'écran la chaîne de caractères qui
lui est passée en paramètre en ligne de commande
*/
printf("%s\n", argv[1]);
return 0;
}
#include <unistd.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/wait.h>
/*
un programme ​ prog1 qui crée un processus fils qui exécute ​ print avec l’argument
salut
en utilisant la fonction ​ execl
int execl(const char *path, const char *arg, ...);
*/
int main(int argc, char const *argv[]) {
/* code */
pid_t pid;
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include<stdlib.h>
/*
un programme qui crée un processus fils affichant à chaque seconde le nombre de secondes
écoulées. Le processus père arrête le processus fils au bout de 10 secondes.
*/
if (pidfils > 0)
{
/* Processus père */
//dormir 10 secondes et tuer le processus fils de pid = pidfils avec le signal SIGKILL : 9
//(kill -l) pour voir la liste des signaux disponible
sleep(10);
kill(pidfils,SIGKILL);
}
else //Pocessus fils
{
//Processus vivant durant 10 secondes avant sa terminaison par son père
while (1) //Boucle infinie
{
//processus fils affichant à chaque seconde le nombre de secondes
//écoulées
sleep(1);
i++;
printf("%d\n", i);
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
/*
Un programme qui crée 2 processus, l’un faisant la commande ls -l, l’autre ps -l. Le
père devra
attendre la fin de ses deux fils et afficher quel a été le premier processus à terminer.
*/
pid_t pid1,pid2;
int status;
if ((pid2=fork()) < 0)
{
/* code */
perror("la création d'un processus fils a échoué");
exit(-1);
}
else if (pid2 > 0)
{
printf("Processus créé avec Pid : %d\n",pid2 );
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
int main(void)
{
pid_t pid;
int i;
if((pid = fork()) == -1) //returns -1: erreur 0=returned to the child >0 = pid
{
perror("fork");
exit(1);
}
if(pid == 0) // fils 1
{
for(i=1; i <= 50; i++)
{
printf("%d \n",i);
}
//printf("Fils 1");
return 0;
//exit(0);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
int main(void)
{
pid_t pid;
int i;
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
/* TD3 EX 1 a
Who & ps & ls -l
*/
if (pid1 == 0) {
/* code */
execlp("who", "who", NULL);
perror("EXECLP");
// waitpid(getppid(),&status,0);
exit(1);
}
if ((pid2=fork())==-1) {
/* code */
perror("la création d'un processus fils a échoué");
exit(1);
}
if (pid2 == 0) {
/* code */
printf("\n##### Waiting for parent ...");
execlp("ps", "ps", NULL);
perror("EXECLP");
printf("\n##### Waiting for parent ...");
//waitpid(getppid(),&status,0);
printf("\n##### Waiting for parent finiched");
exit(1);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
/* TD3 EX 2 b
Who ; ps ; ls -l
*/
if ((pid=fork())==-1) {
/* code */
perror("la création d'un processus fils a échoué");
exit(1);
}
if (pid == 0) {
/* code */
execlp("who", "who", NULL);
perror("EXECLP");
exit(1);
}
wait(NULL);
if ((pid=fork())==-1) {
/* code */
perror("la création d'un processus fils a échoué");
exit(1);
}
if (pid == 0) {
/* code */
execlp("ps", "ps", NULL);
perror("EXECLP");
exit(1);
}
wait(NULL);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
int main(int argc, char const *argv[]) {
/* code */
pid_t respid;
int n,i,status;
if(argc != 2){
n = atoi(argv[1]);
if(respid == -1){
perror("fork");
exit(2);
}
if (respid == 0){
/* code */
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
if(argc != 2){
n = atoi(argv[1]);
ancetre = getpid();
//fils
if (respid == 0) {
/* code */
respid = wait(&status);
printf("fils %d termine \n",respid );
exit(0);
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
pid_t pidG,pidD;
int n,i;
if(argc != 2){
n = atoi(argv[1]);
fprintf(stdout, "process racine pid : %d\n",getpid());
// fils
if (pidG == 0)
{
fprintf(stdout, "fils gauche = %d , (pere = %d)\n",getpid(),getppid() );
}
else //
{
pidD = fork();
//Erreur Creation Fils droit
if (pidD == -1)
{
perror("fork");
exit(2);
}
if (pidD == 0)
{
fprintf(stdout, "fils droit = %d , (pere = %d)\n", getpid(),getppid());
}
//pere
else
{
waitpid(pidG, NULL, 0);
printf("fils %d termine \n",pidG );
waitpid(pidD, NULL, 0);
printf("fils %d termine \n",pidD );
exit(0);
}
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include <sys/wait.h>
int main(int argc, char const *argv[]) {
pid_t pid;
int desc,nbLu;
char buf;
desc = open("fichier",O_RDONLY,0655);
//printf(" descriptor : %d\n",desc);
if (desc == -1) {
perror("open");
exit(1);
}
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
}
do {
nbLu = read(desc,&buf,1);
fprintf(stdout, "Lu : %c (pid = %d)\n",buf,getpid());
sleep(2);
} while(nbLu > 0);
close(desc);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include <sys/wait.h>
//Avoid using char const * argv[] -> not compatible with argument type of
//execvp when shifting the argv by 1 : argv + 1.
//Use char * argv[] instead
//pointer to X" is always allowed to be convert to "pointer to const X
if (argc < 2)
{
fprintf(stderr, "Usage :%s commande [arg] [arg] ....\n",argv[0]);
exit(1);
}
//OR
execvp(argv[1],&argv[1]);
return 0;
}