Comply with GNU Coding Standards

This commit is contained in:
Thomas Wade 2018-10-31 22:23:18 +10:30
parent 5bb16cf20a
commit 59c594c5c3

119
client1.c
View File

@ -1,3 +1,8 @@
// client1 - client program for demonstrating data transfer over TCP/IP
// This program complies with the GNU Coding Standards found here:
// https://www.gnu.org/prep/standards/html_node/index.html
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/time.h> #include <sys/time.h>
@ -12,96 +17,128 @@
#define BUFFERT 512 #define BUFFERT 512
int duration (struct timeval *start,struct timeval *stop, struct timeval *delta); int duration (struct timeval *start, struct timeval *stop,
struct timeval *delta);
int create_client_socket (int port, char* ipaddr); int create_client_socket (int port, char* ipaddr);
struct sockaddr_in sock_serv; struct sockaddr_in sock_serv;
int main (int argc, char**argv){ int main (int argc, char**argv)
{
struct timeval start, stop, delta; struct timeval start, stop, delta;
int sfd,fd; int sfd, fd;
char buf[BUFFERT]; char buf[BUFFERT];
off_t count=0, m,sz; off_t count = 0, m, sz;
long int n; long int n;
int l=sizeof(struct sockaddr_in); int l = sizeof(struct sockaddr_in);
struct stat buffer; struct stat buffer;
if (argc != 4){
printf("Error usage : %s <ip_serv> <port_serv> <filename>\n",argv[0]); if (argc != 4)
{
printf("Error usage : %s <ip_serv> <port_serv> <filename>\n", argv[0]);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
sfd=create_client_socket(atoi(argv[2]), argv[1]);
if ((fd = open(argv[3],O_RDONLY))==-1){ sfd = create_client_socket(atoi(argv[2]), argv[1]);
if ((fd = open(argv[3], O_RDONLY)) == -1)
{
perror("open fail"); perror("open fail");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (stat(argv[3],&buffer)==-1){
if (stat(argv[3], &buffer) == -1)
{
perror("stat fail"); perror("stat fail");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
else else
sz=buffer.st_size; {
bzero(&buf,BUFFERT); sz = buffer.st_size;
if(connect(sfd,(struct sockaddr*)&sock_serv,l)==-1){ }
bzero(&buf, BUFFERT);
if(connect(sfd, (struct sockaddr*) &sock_serv, l) == -1)
{
perror("conexion error\n"); perror("conexion error\n");
exit (3); exit (3);
} }
gettimeofday(&start,NULL);
n=read(fd,buf,BUFFERT); gettimeofday(&start, NULL);
while(n){
if(n==-1){ n = read(fd, buf, BUFFERT);
while(n)
{
if(n == -1)
{
perror("read fails"); perror("read fails");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
m=sendto(sfd,buf,n,0,(struct sockaddr*)&sock_serv,l);
if(m==-1){ m = sendto(sfd, buf, n, 0, (struct sockaddr*) &sock_serv, l);
if(m == -1)
{
perror("send error"); perror("send error");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
count+=m;
count += m;
bzero(buf,BUFFERT); bzero(buf,BUFFERT);
n=read(fd,buf,BUFFERT); n = read(fd,buf,BUFFERT);
} }
m=sendto(sfd,buf,0,0,(struct sockaddr*)&sock_serv,l);
gettimeofday(&stop,NULL); m = sendto(sfd, buf, 0, 0, (struct sockaddr*) &sock_serv, l);
duration(&start,&stop,&delta); gettimeofday(&stop, NULL);
printf("Nombre d'octets transférés : %lld\n",count); duration(&start, &stop, &delta);
printf("Sur une taille total de : %lld \n",sz); printf("Nombre d'octets transférés : %lld\n", count);
printf("Pour une durée total de : %ld.%d \n",delta.tv_sec,delta.tv_usec); printf("Sur une taille total de : %lld \n", sz);
printf("Pour une durée total de : %ld.%d \n", delta.tv_sec, delta.tv_usec);
close(sfd); close(sfd);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
int duration (struct timeval *start,struct timeval *stop,struct timeval *delta) int duration (struct timeval *start, struct timeval *stop,
struct timeval *delta)
{ {
suseconds_t microstart, microstop, microdelta; suseconds_t microstart, microstop, microdelta;
microstart = (suseconds_t) (100000*(start->tv_sec))+ start->tv_usec; microstart = (suseconds_t) (100000 * (start->tv_sec)) + start->tv_usec;
microstop = (suseconds_t) (100000*(stop->tv_sec))+ stop->tv_usec; microstop = (suseconds_t) (100000 * (stop->tv_sec)) + stop->tv_usec;
microdelta = microstop - microstart; microdelta = microstop - microstart;
delta->tv_usec = microdelta%100000; delta->tv_usec = microdelta % 100000;
delta->tv_sec = (time_t)(microdelta/100000); delta->tv_sec = (time_t) (microdelta / 100000);
if((*delta).tv_sec < 0 || (*delta).tv_usec < 0)
return -1; if ((*delta).tv_sec < 0 || (*delta).tv_usec < 0)
{
return -1;
}
else else
return 0; {
return 0;
}
} }
int create_client_socket (int port, char* ipaddr){ int create_client_socket (int port, char* ipaddr)
{
int l; int l;
int sfd; int sfd;
sfd = socket(PF_INET,SOCK_STREAM,0); sfd = socket(PF_INET, SOCK_STREAM, 0);
if (sfd == -1){ if (sfd == -1)
{
perror("socket fail"); perror("socket fail");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
l=sizeof(struct sockaddr_in);
bzero(&sock_serv,l); l = sizeof(struct sockaddr_in);
bzero(&sock_serv, l);
sock_serv.sin_family=AF_INET; sock_serv.sin_family=AF_INET;
sock_serv.sin_port=htons(port); sock_serv.sin_port=htons(port);
if (inet_pton(AF_INET,ipaddr,&sock_serv.sin_addr)==0){ if (inet_pton(AF_INET, ipaddr, &sock_serv.sin_addr) == 0){
printf("Invalid IP adress\n"); printf("Invalid IP adress\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
return sfd; return sfd;
} }