Skip to content
Extraits de code Groupes Projets
Valider 9e42200e rédigé par CharlyBVO's avatar CharlyBVO
Parcourir les fichiers

fix references aux codes src dans les sections langage C et fichiers

parent f69424fa
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 547 ajouts et 0 suppression
/**************************************
* prog
*
* Programme d'exemple pour le linker
*
**************************************/
#include <stdlib.h>
#include <stdio.h>
///AAA
#include "min.h"
#include "module.h"
#define SIZE 4
extern int num1; // définie dans un autre module
int num2=1252; // accessible depuis un autre module
static int num3=-1; // accessible uniquement dans ce module
void f() {
static int n=0;
int loc=2;
if(n==0)
printf("n est à l'adresse %p et loc à l'adresse %p\n",&n,&loc);
printf("f, n=%d\n",n);
n++;
}
int main(int argc, char* argv[]) {
float v[SIZE]={1.0, 3.4, -2.4, 9.9};
printf("Minimum: %f\n",vmin(SIZE,v));
f();
f();
printf("Minimum(0.0,1.1)=%f\n",min(0.0,1.1));
return(EXIT_SUCCESS);
}
Minimum: -2.400000
n est à l'adresse 0x100001078 et loc à l'adresse 0x7fff5fbfe1cc
f, n=0
f, n=1
Minimum(0.0,1.1)=0.000000
/**************************************
* ptrptr.c
*
* Programme d'exemple pour les pointeurs
* vers des pointeurs
*
**************************************/
#include <stdio.h>
#include <stdlib.h>
///AAA
int main(int argc, char **argv) {
char **p;
p=argv;
printf("Arguments :");
while(*p!=NULL) {
printf(" %s",*p);
p++;
}
printf("\n");
return(EXIT_SUCCESS);
}
///BBB
/**************************************
* qosrt.c
*
* Programme d'exemple d'utilisation de qsort
*
**************************************/
#include <stdio.h>
#include <stdlib.h>
///AAA
#define SIZE 5
double array[SIZE]= { 1.0, 7.32, -3.43, 8.7, 9.99 };
void print_array() {
for(int i=0;i<SIZE;i++)
printf("array[i]:%f\n",array[i]);
}
int cmp(const void *ptr1, const void *ptr2) {
const double *a=ptr1;
const double *b=ptr2;
if(*a==*b)
return 0;
else
if(*a<*b)
return -1;
else
return +1;
}
int main(int argc, char *argv[]) {
printf("Avant qsort\n\n");
print_array();
qsort(array,SIZE,sizeof(double),cmp);
printf("Après qsort\n\n");
print_array();
return(EXIT_SUCCESS);
}
///BBB
/**************************************
* strtol.c
*
* Programme d'exemple d'utilisation de strtol
*
**************************************/
///AAA
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
char *p, *s;
long li;
s = "1252";
li = strtol(s,&p,10);
if(*p != '\0') {
printf("Caractère erronné : %c\n",*p);
// p pointe vers le caractère en erreur
}
printf("Valeur convertie : %s -> %ld\n",s,li);
s = "12m52";
li = strtol(s,&p,10);
if(*p != '\0') {
printf("Caractère erronné : %c\n",*p);
}
printf("Valeur convertie : %s -> %ld\n",s,li);
return(EXIT_SUCCESS);
}
Valeur convertie : 1252 -> 1252
Caractère erronné : m
Valeur convertie : 12m52 -> 12
/**************************************
* cmdline.c
*
* Programme affichant ses arguments
* sur la sortie standard
*
**************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
printf("Ce programme a %d argument(s)\n", argc);
for (i = 0; i < argc; i++)
printf("argument[%d] : %s\n", i, argv[i]);
return EXIT_SUCCESS;
}
Ce programme a 5 argument(s)
argument[0] : ./cmdline
argument[1] : 1
argument[2] : -list
argument[3] : abcdef
argument[4] : lepl1503
/**************************************
* failure.c
*
* Programme minimal qui échoue toujours
*
**************************************/
#include <stdlib.h>
int main(int argc, char *argv[])
{
return EXIT_FAILURE;
}
/**************************************
* filterdigit.c
*
* Programme qui extrait de l'entrée
* standard les caractères représentant
* des chiffres
**************************************/
#include <stdio.h>
#include <stdlib.h>
// retourne vrai si c est un chiffre, faux sinon
// exemple simplifié, voir isdigit dans la librarire standard
// pour une solution complète
int digit(char c)
{
return ((c >= '0') && (c <= '9'));
}
// affiche un message d'erreur
void usage()
{
fprintf(stderr, "Ce programme ne prend pas d'argument\n");
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
char c;
if (argc > 1)
usage();
while ((c = getchar()) != EOF) {
if (digit(c))
putchar(c);
}
return EXIT_SUCCESS;
}
/**************************************
* Hello.c
*
* Programme affichant sur la sortie
* standard le message "Hello, world!"
*
**************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// affiche sur la sortie standard
printf("Hello, world!\n");
return EXIT_SUCCESS;
}
/**************************************
* printf.c
*
* Exemples d'utilisation de printfProgramme qui a réussi
*
**************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
///AAA
char weekday[] = "Monday";
char month[] = "April";
int day = 1;
int hour = 12;
int min = 42;
char str[] = "SINF1252";
int i;
// affichage de la date et l'heure
printf("%s, %s %d, %d:%d\n", weekday, month, day, hour, min);
// affichage de la valeur de PI
printf("PI = %f\n", 4 * atan(1.0));
// affichage d'un caractère par ligne
for(i = 0; str[i] != '\0'; i++)
printf("%c\n", str[i]);
///BBB
return EXIT_SUCCESS;
}
Monday, April 1, 12:42
PI = 3.141593
L
E
P
L
1
5
0
3
// arithmétique des pointeurs
#include <stdio.h>
int main(int argc, char *argv[])
{
///AAA
#define SIZE 3
unsigned int tab[3];
tab[0] = 0x01020304;
tab[1] = 0x05060708;
tab[2] = 0x090A0B0C;
///BBB
///CCC
int i;
for (i = 0; i < SIZE; i++) {
printf("%X est à l'adresse %p\n", tab[i], &(tab[i]));
}
///DDD
///EEE
unsigned int* ptr = tab;
for (i = 0; i < SIZE; i++) {
printf("%X est à l'adresse %p\n", *ptr, ptr);
ptr++;
}
///FFF
///GGG
unsigned char* ptr_char = (unsigned char *) tab;
printf("ptr_char contient %p\n", ptr_char);
for (i = 0; i < SIZE + 1; i++) {
printf("%X est à l'adresse %p\n", *ptr_char, ptr_char);
ptr_char++;
}
///HHH
}
/**************************************
* string.c
*
* Programme d'expemple avec les strings
*
**************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
///AAA
char string[10];
string[0] = 'j';
string[1] = 'a';
string[2] = 'v';
string[3] = 'a';
string[4] = '\0';
printf("String : %s\n", string);
///BBB
return EXIT_SUCCESS;
}
Fichier ajouté
/**************************************
* alarm.c
*
* Programme d'exemple d'utilisation des
* signaux SIGUSR
*
*************************************/
///AAA
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <stdbool.h>
static void sig_handler(int);
int main (int argc, char *argv[]) {
char c;
printf("Tapez return en moins de 5 secondes !\n");
fflush(stdout);
if(signal(SIGALRM,sig_handler)==SIG_ERR) {
perror("signal");
exit(EXIT_FAILURE);
}
// sigalrm interrompt les appels système
if(siginterrupt(SIGALRM,true)<0) {
perror("siginterrupt");
exit(EXIT_FAILURE);
}
alarm(5);
int r=read(STDIN_FILENO,&c,1);
if((r==1)&&(c=='\n')) {
alarm(0); // reset timer
printf("Gagné\n");
exit(EXIT_SUCCESS);
}
printf("Perdu !\n");
exit(EXIT_FAILURE);
}
static void sig_handler(int signum) {
// rien à faire, read sera interrompu
}
///BBB
Tapez return en moins de 5 secondes !
Perdu !
/**************************************
* alarm.c
*
* Programme d'exemple d'utilisation des
* signaux SIGUSR
*
*************************************/
///AAA
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <stdbool.h>
#include <setjmp.h>
sigjmp_buf env;
static void sig_handler(int);
int main (int argc, char *argv[]) {
char c;
printf("Tapez return en moins de 5 secondes !\n");
fflush(stdout);
if(signal(SIGALRM,sig_handler)==SIG_ERR) {
perror("signal");
exit(EXIT_FAILURE);
}
// sigalrm interrompt les appels système
if(siginterrupt(SIGALRM,true)<0) {
perror("siginterrupt");
exit(EXIT_FAILURE);
}
int r=0;
if(sigsetjmp(env,1)==0) {
// sig_handler n'a pas encore été appelé
alarm(5);
r=read(STDIN_FILENO,&c,1);
}
else {
// sig_handler a déjà été exécuté
// le délai a déjà expiré, inutile de faire read
}
alarm(0); // arrêt du timer
if((r==1)&&(c=='\n')) {
printf("Gagné\n");
exit(EXIT_SUCCESS);
}
else {
printf("Perdu !\n");
exit(EXIT_FAILURE);
}
}
static void sig_handler(int signum) {
siglongjmp(env,1);
}
///BBB
/**************************************
* fork-pipe.c
*
* Programme d'exemple d'utilisation de
* pipe en combinaison avec fork
*
*************************************/
///AAA
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdbool.h>
void exit_on_error(char *s) {
perror(s);
exit(EXIT_FAILURE);
}
int main (int argc, char *argv[]) {
int status;
pid_t pid;
int fd[2];
int err;
if ( pipe(fd)==-1)
exit_on_error("pipe");
pid=fork();
if (pid==-1) {
// erreur à l'exécution de fork
exit_on_error("fork");
}
// pas d'erreur
if (pid==0) {
int count=0;
int finished=false;
int n;
// processus fils, lecture du pipe
if(close(fd[1])==-1)
exit_on_error("close");
while ( !finished) {
err=read(fd[0],(void *) &n,sizeof(int));
if(err==sizeof(int))
// entier reçu
count++;
else
if(err==0)
// fin de fichier
finished=true;
else
exit_on_error("read");
}
if(close(fd[0])==-1)
exit_on_error("close");
printf("Reçu : %d entiers\n",count);
return(EXIT_SUCCESS);
}
else {
// processus père
if(close(fd[0])==-1)
exit_on_error("close");
for(int i=0;i<100000;i++) {
if(write(fd[1],(void *) &i,sizeof(int))==-1)
exit_on_error("write");
}
if( close(fd[1])==-1)
exit_on_error("close(fd[1])");
int fils=waitpid(pid,&status,0);
if(fils==-1) {
exit_on_error("wait");
}
// fils terminé correctement
}
}
///BBB
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter