Sunday, April 24, 2011

Pipes

# include <sys/wait.h>
# include <stdio.h>
# include <stdlib.h>
# define MAXLINE 4096

# define PAGER "${PAGER:-more}"

int main(int argc,char*argv[])
{
    char line[MAXLINE];
    FILE *fpin,*fpout;
    if(argc!=2)
    {
    perror("\n usage :- a.out <path name>");
    exit(0);
    }
    if((fpin=fopen(argv[1],"r"))==NULL)
    {
    printf("\nUnable to open %s",argv[1]);
    }
    if((fpout=popen(PAGER,"w"))==NULL)
    perror("popen error...");
   
    while(fgets(line,MAXLINE,fpin))
    {
        if(fputs(line,fpout)==EOF)
        perror("\n fput error...");
    }
   
    if(ferror(fpin))
    perror("fgets error...");
    if(pclose(fpout)==-1)
    perror("pclose error..");
exit(0);
}

   
   

   
   

File Transaction using Message O's IPC

//message file transaction


    # include <stdio.h>
    # include <string.h>
    # include <sys/stat.h>
    # include <sys/msg.h>
    # include <sys/ipc.h>
    # include <sys/types.h>

    //message structure
   
    struct message
    {
    long msg_type;
    char msg_data[1024];
    };
    //global objects
    struct message msg_obj1={100,"I"};
    struct message msg_obj2={100,"M"};
    //global msg id
    int msg_id;
   
    //function to put file to message Q
    putToMessageQ(char*fn)
    {
    FILE*f;
    int x,y,i=0;
    char ch;
    if((f=fopen(fn,"r"))==NULL)
    perror("\nUnable to open file for reading...");
    else
    {
        while((ch=getc(f))!=EOF)
        {
        msg_obj1.msg_data[i++]=ch; //writing to msg_data
        }   
        fclose(f); //closing file
    }
       
    //creating msg q id
    if((msg_id=msgget(1234,IPC_CREAT|0644))==-1)
    perror("\nUnable to get message id...");
    else
    printf("\nmsgid=%d",msg_id);

    /*writing message to the q */
    if((x=msgsnd(msg_id,&msg_obj1,strlen(msg_obj1.msg_data),IPC_NOWAIT))==-1)
    perror("\nUnable to send message...");
    else
    printf("\nSend Msg Success : return %d",x);

    }

    //function to transfer the file

    getFromMessageQ(char*fn)
    {

    FILE*f;
    int x,y,i=0;
    char ch;

    /* rec message from q*/
    if((y=msgrcv(msg_id,&msg_obj2,15,100,MSG_NOERROR))==-1)
    perror(":- msgrcv error...");
    else
    printf("\nRec Bytes : %d",y);

    if((f=fopen(fn,"w"))==NULL)
    perror("\nUnable to open file for writing...");
    else
    {
        for(i=0;msg_obj2.msg_data[i]!=0;i++)
        {
        putc(msg_obj2.msg_data[i],f);
        }   
        fclose(f); //closing file
    }
    return 0;   
    }
       
   
    int main(int argc,char*argv[])
    {
    putToMessageQ(argv[1]);
    getFromMessageQ(argv[2]);
    return 0;   
    }


       
       

Message queue's IPC

//message sending  msgsndQ.c

    # include <stdio.h>
    # include <string.h>
    # include <sys/stat.h>
    # include <sys/msg.h>
    # include <sys/ipc.h>
    # include <sys/types.h>

    struct message
    {
    long msg_type;
    char msg_data[1024];
    };

    int main(int arc,char*argv[])
    {
    //message structure
    FILE*f;
    int x,y,i=0;
    char ch;
    int key=1234;
    int msg_id;
    struct message msg_obj1={100,"I"};

    //function to put file to message Q
    if((f=fopen(argv[1],"r"))==NULL)
    perror("\nUnable to open file for reading...");
    else
    {
        while((ch=getc(f))!=EOF)
        {
        msg_obj1.msg_data[i++]=ch; //writing to msg_data
        }   
        fclose(f); //closing file
    }
       
    //creating msg q id
    if((msg_id=msgget(key,IPC_CREAT|0644))==-1)
    perror("\nUnable to get message id...");
    else
    printf("\nmsgid=%d",msg_id);

    /*writing message to the q */
    if((x=msgsnd(msg_id,&msg_obj1,strlen(msg_obj1.msg_data),IPC_NOWAIT))==-1)
    perror("\nUnable to send message...");
    else
    printf("\nSend Msg Success : return %d",x);

    return 0;   
    }

//message receiving file msgrevQ.c


    # include <stdio.h>
    # include <string.h>
    # include <sys/stat.h>
    # include <sys/msg.h>
    # include <sys/ipc.h>
    # include <sys/types.h>

    //message structure
   
    struct message
    {
    long msg_type;
    char msg_data[1024];
    };
    int main(int argc,char*argv[])
    {
    FILE*f;
    int x,y,i=0;
    char ch;
    struct message msg_obj2={100,"M"};
    int msg_id;
   
    //creating msg q id
    if((msg_id=msgget(1234,0644))==-1)
    perror("\nUnable to get message id...");
    else
    printf("\nmsgid=%d",msg_id);

    /* rec message from q*/
    if((y=msgrcv(msg_id,&msg_obj2,1024,100,MSG_NOERROR))==-1)
    perror(":- msgrcv error...");
    else
    printf("\nRec Bytes : %d",y);

    if((f=fopen(argv[1],"w"))==NULL)
    perror("\nUnable to open file for writing...");
    else
    {
        for(i=0;msg_obj2.msg_data[i]!=0;i++)
        {
        putc(msg_obj2.msg_data[i],f);
        }   
        fclose(f); //closing file
    }
    return 0;   
    }


       
       




       
       

Tuesday, April 5, 2011

udp client server prog

//udp client
#include <stdlib.h> /* for exit() */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* memset() */
#include <sys/time.h> /* select() */
#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100

#define SOCKET_ERROR -1
int isReadable(int sd,int * error,int timeOut) { // milliseconds
  fd_set socketReadSet;
  FD_ZERO(&socketReadSet);
  FD_SET(sd,&socketReadSet);
  struct timeval tv;
  if (timeOut) {
    tv.tv_sec  = timeOut / 1000;
    tv.tv_usec = (timeOut % 1000) * 1000;
  } else {
    tv.tv_sec  = 0;
    tv.tv_usec = 0;
  } // if
  if (select(sd+1,&socketReadSet,0,0,&tv) == SOCKET_ERROR) {
    *error = 1;
    return 0;
  } // if
  *error = 0;
  return FD_ISSET(sd,&socketReadSet) != 0;
} /* isReadable */
/* END jcs 3/30/05 */
int main(int argc, char *argv[]) {
 
  int sd, rc, i, n, echoLen, flags, error, timeOut;
  struct sockaddr_in cliAddr, remoteServAddr, echoServAddr;
  struct hostent *h;
  char msg[MAX_MSG];

  /* check command line args */
  if(argc<3) {
    printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
    exit(1);
  }
  /* get server IP address (no check if input is IP address or DNS name */
  h = gethostbyname(argv[1]);
  if(h==NULL) {
    printf("%s: unknown host '%s' \n", argv[0], argv[1]);
    exit(1);
  }
  printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,
  inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
  remoteServAddr.sin_family = h->h_addrtype;
  memcpy((char *) &remoteServAddr.sin_addr.s_addr,
  h->h_addr_list[0], h->h_length);
  remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);
  /* socket creation */
  sd = socket(AF_INET,SOCK_DGRAM,0);
  if(sd<0) {
    printf("%s: cannot open socket \n",argv[0]);
    exit(1);
  }
 
  /* bind any port */
  cliAddr.sin_family = AF_INET;
  cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  cliAddr.sin_port = htons(0);
 
  rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
  if(rc<0) {
    printf("%s: cannot bind port\n", argv[0]);
    exit(1);
  }
/* BEGIN jcs 3/30/05 */
  flags = 0;
  timeOut = 100; // ms
/* END jcs 3/30/05 */
  /* send data */
  for(i=2;i<argc;i++) {
    rc = sendto(sd, argv[i], strlen(argv[i])+1, flags,
  (struct sockaddr *) &remoteServAddr,
  sizeof(remoteServAddr));
    if(rc<0) {
      printf("%s: cannot send data %d \n",argv[0],i-1);
      close(sd);
      exit(1);
    }
/* BEGIN jcs 3/30/05 */
    /* init buffer */
    memset(msg,0x0,MAX_MSG);
    while (!isReadable(sd,&error,timeOut)) printf(".");
    printf("\n");
    /* receive echoed message */
    echoLen = sizeof(echoServAddr);
    n = recvfrom(sd, msg, MAX_MSG, flags,
      (struct sockaddr *) &echoServAddr, &echoLen);
    if(n<0) {
      printf("%s: cannot receive data \n",argv[0]);
      continue;
    }
    /* print received message */
    printf("%s: echo from %s:UDP%u : %s \n",
      argv[0],inet_ntoa(echoServAddr.sin_addr),
      ntohs(echoServAddr.sin_port),msg);
/* END jcs 3/30/05 */
  }
 
  return 1;
}


//udp server for echoing

/* fpont 12/99 */
/* pont.net    */
/* udpServer.c */
/* Converted to echo client/server with select() (timeout option). See udpClient.c */
/* 3/30/05 John Schultz */
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h> /* close() */
#include <string.h> /* memset() */
#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 100
int main(int argc, char *argv[]) {
 
  int sd, rc, n, cliLen, flags;
  struct sockaddr_in cliAddr, servAddr;
  char msg[MAX_MSG];
  /* socket creation */
  sd=socket(AF_INET, SOCK_DGRAM, 0);
  if(sd<0) {
    printf("%s: cannot open socket \n",argv[0]);
    exit(1);
  }
  /* bind local server port */
  servAddr.sin_family = AF_INET;
  servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  servAddr.sin_port = htons(LOCAL_SERVER_PORT);
  rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
  if(rc<0) {
    printf("%s: cannot bind port number %d \n",
    argv[0], LOCAL_SERVER_PORT);
    exit(1);
  }
  printf("%s: waiting for data on port UDP %u\n",
    argv[0],LOCAL_SERVER_PORT);
/* BEGIN jcs 3/30/05 */
  flags = 0;
/* END jcs 3/30/05 */
  /* server infinite loop */
  while(1) {
   
    /* init buffer */
    memset(msg,0x0,MAX_MSG);
    /* receive message */
    cliLen = sizeof(cliAddr);
    n = recvfrom(sd, msg, MAX_MSG, flags,
   (struct sockaddr *) &cliAddr, &cliLen);
    if(n<0) {
      printf("%s: cannot receive data \n",argv[0]);
      continue;
    }
     
    /* print received message */
    printf("%s: from %s:UDP%u : %s \n",
    argv[0],inet_ntoa(cliAddr.sin_addr),
    ntohs(cliAddr.sin_port),msg);
/* BEGIN jcs 3/30/05 */
    sleep(1);
    sendto(sd,msg,n,flags,(struct sockaddr *)&cliAddr,cliLen);
/* END jcs 3/30/05 */
   
  }/* end of server infinite loop */
return 0;
}







 

tcp client in unix/linux

//tcp client prog

#include    "unp.h"
void
str_cli(FILE *fp, int sockfd)
{
 char sendline[MAXLINE], recvline[MAXLINE];
 while (Fgets(sendline, MAXLINE, fp) != NULL) {
  Writen(sockfd, sendline, strlen(sendline));
  if (Readline(sockfd, recvline, MAXLINE) == 0)
   err_quit("str_cli: server terminated prematurely");
  Fputs(recvline, stdout);
 }
}
int
main(int argc, char **argv)
{
 int     sockfd;
 struct sockaddr_in servaddr;
 if (argc != 2)
  err_quit("usage: tcpcli <IPaddress>");
 sockfd = Socket(AF_INET, SOCK_STREAM, 0);
 bzero(&servaddr, sizeof(servaddr));
 servaddr.sin_family = AF_INET;
 servaddr.sin_port = htons(SERV_PORT);
 Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
 Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
 str_cli(stdin, sockfd);  /* do it all */
 exit(0);
}
//tcp server
#include "unp.h"
void
str_echo(int sockfd)
{
 long  arg1, arg2;
 ssize_t  n;
 char  line[MAXLINE];
 for ( ; ; ) {
  if ( (n = Readline(sockfd, line, MAXLINE)) == 0)
   return;  /* connection closed by other end */
  n = strlen(line);
  Writen(sockfd, line, n);
 }
}
int
main(int argc, char **argv)
{
 int     listenfd, connfd;
 pid_t    childpid;
 socklen_t   clilen;
 struct sockaddr_in cliaddr, servaddr;
 listenfd = Socket(AF_INET, SOCK_STREAM, 0);
 bzero(&servaddr, sizeof(servaddr));
 servaddr.sin_family      = AF_INET;
 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
 servaddr.sin_port        = htons(SERV_PORT);
 Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
 Listen(listenfd, LISTENQ);
        printf("Server Running on Port %d\n", SERV_PORT);
 for ( ; ; ) {
  clilen = sizeof(cliaddr);
  connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
  if ( (childpid = Fork()) == 0) { /* child process */
   Close(listenfd); /* close listening socket */
   str_echo(connfd); /* process the request */
   exit(0);
  }
  Close(connfd);   /* parent closes connected socket */
 }
}