Tuesday, 5 May 2015

errno.h - C Error Codes in Linux

All the Linux/C error codes are listed below.
I occasionally google C error codes, but always end up grepping through /usr/include to find the answer. To save myself, and a few others, some time in the future...
/usr/include/asm-generic/errno-base.h

#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */
#define ESRCH        3  /* No such process */
#define EINTR        4  /* Interrupted system call */
#define EIO       5  /* I/O error */
#define ENXIO        6  /* No such device or address */
#define E2BIG        7  /* Argument list too long */
#define ENOEXEC      8  /* Exec format error */
#define EBADF        9  /* Bad file number */
#define ECHILD      10  /* No child processes */
#define EAGAIN      11  /* Try again */
#define ENOMEM      12  /* Out of memory */
#define EACCES      13  /* Permission denied */
#define EFAULT      14  /* Bad address */
#define ENOTBLK     15  /* Block device required */
#define EBUSY       16  /* Device or resource busy */
#define EEXIST      17  /* File exists */
#define EXDEV       18  /* Cross-device link */
#define ENODEV      19  /* No such device */
#define ENOTDIR     20  /* Not a directory */
#define EISDIR      21  /* Is a directory */
#define EINVAL      22  /* Invalid argument */
#define ENFILE      23  /* File table overflow */
#define EMFILE      24  /* Too many open files */
#define ENOTTY      25  /* Not a typewriter */
#define ETXTBSY     26  /* Text file busy */
#define EFBIG       27  /* File too large */
#define ENOSPC      28  /* No space left on device */
#define ESPIPE      29  /* Illegal seek */
#define EROFS       30  /* Read-only file system */
#define EMLINK      31  /* Too many links */
#define EPIPE       32  /* Broken pipe */
#define EDOM        33  /* Math argument out of domain of func */
#define ERANGE      34  /* Math result not representable */

#endif
/usr/include/asm-generic/errno.h
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#include <asm-generic/errno-base.h>

#define EDEADLK     35  /* Resource deadlock would occur */
#define ENAMETOOLONG    36  /* File name too long */
#define ENOLCK      37  /* No record locks available */
#define ENOSYS      38  /* Function not implemented */
#define ENOTEMPTY   39  /* Directory not empty */
#define ELOOP       40  /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN  /* Operation would block */
#define ENOMSG      42  /* No message of desired type */
#define EIDRM       43  /* Identifier removed */
#define ECHRNG      44  /* Channel number out of range */
#define EL2NSYNC    45  /* Level 2 not synchronized */
#define EL3HLT      46  /* Level 3 halted */
#define EL3RST      47  /* Level 3 reset */
#define ELNRNG      48  /* Link number out of range */
#define EUNATCH     49  /* Protocol driver not attached */
#define ENOCSI      50  /* No CSI structure available */
#define EL2HLT      51  /* Level 2 halted */
#define EBADE       52  /* Invalid exchange */
#define EBADR       53  /* Invalid request descriptor */
#define EXFULL      54  /* Exchange full */
#define ENOANO      55  /* No anode */
#define EBADRQC     56  /* Invalid request code */
#define EBADSLT     57  /* Invalid slot */

#define EDEADLOCK   EDEADLK

#define EBFONT      59  /* Bad font file format */
#define ENOSTR      60  /* Device not a stream */
#define ENODATA     61  /* No data available */
#define ETIME       62  /* Timer expired */
#define ENOSR       63  /* Out of streams resources */
#define ENONET      64  /* Machine is not on the network */
#define ENOPKG      65  /* Package not installed */
#define EREMOTE     66  /* Object is remote */
#define ENOLINK     67  /* Link has been severed */
#define EADV        68  /* Advertise error */
#define ESRMNT      69  /* Srmount error */
#define ECOMM       70  /* Communication error on send */
#define EPROTO      71  /* Protocol error */
#define EMULTIHOP   72  /* Multihop attempted */
#define EDOTDOT     73  /* RFS specific error */
#define EBADMSG     74  /* Not a data message */
#define EOVERFLOW   75  /* Value too large for defined data type */
#define ENOTUNIQ    76  /* Name not unique on network */
#define EBADFD      77  /* File descriptor in bad state */
#define EREMCHG     78  /* Remote address changed */
#define ELIBACC     79  /* Can not access a needed shared library */
#define ELIBBAD     80  /* Accessing a corrupted shared library */
#define ELIBSCN     81  /* .lib section in a.out corrupted */
#define ELIBMAX     82  /* Attempting to link in too many shared libraries */
#define ELIBEXEC    83  /* Cannot exec a shared library directly */
#define EILSEQ      84  /* Illegal byte sequence */
#define ERESTART    85  /* Interrupted system call should be restarted */
#define ESTRPIPE    86  /* Streams pipe error */
#define EUSERS      87  /* Too many users */
#define ENOTSOCK    88  /* Socket operation on non-socket */
#define EDESTADDRREQ    89  /* Destination address required */
#define EMSGSIZE    90  /* Message too long */
#define EPROTOTYPE  91  /* Protocol wrong type for socket */
#define ENOPROTOOPT 92  /* Protocol not available */
#define EPROTONOSUPPORT 93  /* Protocol not supported */
#define ESOCKTNOSUPPORT 94  /* Socket type not supported */
#define EOPNOTSUPP  95  /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT    96  /* Protocol family not supported */
#define EAFNOSUPPORT    97  /* Address family not supported by protocol */
#define EADDRINUSE  98  /* Address already in use */
#define EADDRNOTAVAIL   99  /* Cannot assign requested address */
#define ENETDOWN    100 /* Network is down */
#define ENETUNREACH 101 /* Network is unreachable */
#define ENETRESET   102 /* Network dropped connection because of reset */
#define ECONNABORTED    103 /* Software caused connection abort */
#define ECONNRESET  104 /* Connection reset by peer */
#define ENOBUFS     105 /* No buffer space available */
#define EISCONN     106 /* Transport endpoint is already connected */
#define ENOTCONN    107 /* Transport endpoint is not connected */
#define ESHUTDOWN   108 /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS    109 /* Too many references: cannot splice */
#define ETIMEDOUT   110 /* Connection timed out */
#define ECONNREFUSED    111 /* Connection refused */
#define EHOSTDOWN   112 /* Host is down */
#define EHOSTUNREACH    113 /* No route to host */
#define EALREADY    114 /* Operation already in progress */
#define EINPROGRESS 115 /* Operation now in progress */
#define ESTALE      116 /* Stale NFS file handle */
#define EUCLEAN     117 /* Structure needs cleaning */
#define ENOTNAM     118 /* Not a XENIX named type file */
#define ENAVAIL     119 /* No XENIX semaphores available */
#define EISNAM      120 /* Is a named type file */
#define EREMOTEIO   121 /* Remote I/O error */
#define EDQUOT      122 /* Quota exceeded */

#define ENOMEDIUM   123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */
#define ECANCELED   125 /* Operation Canceled */
#define ENOKEY      126 /* Required key not available */
#define EKEYEXPIRED 127 /* Key has expired */
#define EKEYREVOKED 128 /* Key has been revoked */
#define EKEYREJECTED    129 /* Key was rejected by service */

/* for robust mutexes */
#define EOWNERDEAD  130 /* Owner died */
#define ENOTRECOVERABLE 131 /* State not recoverable */

#endif

Wednesday, 25 March 2015

CNAME RECORD - What? Why? How?

What is CNAME ?

CNAME is Canonical Name record, which is used to create alias for another domain. 


Why CNAME ?

If you want to create a local alias for a server, you need to create a CNAME.
Eg: If you want to access www.google.com with different name, for example www.testcname.com, from your computer, you have to create a CNAME.


How to create a CNAME ?

1. Open C:\Windows\System32\drivers\etc\hosts file
2. Add an entry in the below format and save.
   <ip address> <alias>
   For the above shown example it will be:
   <google ip> www.testcname.com
3. If your traffic goes through a proxy, you have to add "www.testcname.com" to proxy settings.
   On chrome, goto
   settings -> Advanced settings -> Change proxy settings -> connections tab -> LAN settings -> Advanced 
   And add "www.testcname.com" to exceptions.
4. Done. If you type www.testcname.com in the browser, it will goto www.google.com

Friday, 27 February 2015

Sample SHELL program to illustrate file read and file write operations

if [ $# -lt 2 ]
then
  echo "Please provide 2 file names";
  exit
fi

while read LINE
do
  echo $LINE >> $2
done < $1

Sample PERL program to illustrate file read and file write operations

#!/usr/bin/perl

use strict;
use warnings;

if(@ARGV < 2)
{
  print "Please provide 2 file names\n";
  exit;
}

open my $IFILE, "<", $ARGV[0];
open my $OFILE, ">", $ARGV[1];

while(<$IFILE>)
{
  print $OFILE $_;
}

Sample C++ program to illustrate file read and file write operations

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char * argv[])
{
  if(argc < 3)
  {
    cout<< "Please pass 2 file names"<<endl;
    return 0;
  }
  else
  {
    string line;

    fstream ifile, ofile;
    ifile.open(argv[1], ios::in);
    ofile.open(argv[2], ios::out);

    while(getline(ifile, line))
    {
      ofile << line << endl ;
    }

    return 1;
  }
}

Wednesday, 25 February 2015

How to customize the date to get required format in shell programming.

Get name of the day:
date +"%A"

Get only day without month and year:
date +"%d"

Get hour of the day (00..23):
date +"%H"

Get hour of the day (01..12):
date +"%I"

Get day of the year:
date +"%j"

Get name of the month:
date +"%B"

Get only month:
date +"%m"

Get current century:
date +"%C"

Get only year:
date +"%Y"

Get full date in yyyy-mm-dd format:
date +"%F" or date +"%Y-%m-%d"

Get minute of the hour:
date +"%M"

Get second of the minute:
date +"%S"

Get time in hh:mm:ss
date +"%T" or date +"%H:%M:%S"

Get the timestamp:
date +"%s"

Friday, 20 February 2015

Sample SHELL program to illustrate - 1) Declaring variables 2) Writing to STDOUT, 3) reading user input from STDIN, 4) Using IF statement 5) Using FOR and WHILE loops

echo -n "What is your name ? "
read name
echo "Hi $name"

echo -n "Enter a number: "
read num

echo -n "Even numbers below $num: "
for((i = 1; i <= $num; i++))
do
  if [ `expr $i % 2` == 0 ]
  then
    echo -n "$i ";
  fi
done
echo -e ""

echo -n "Odd numbers below $num: "
j=1
while [ $j -le $num ]
do
  if [ `expr $j % 2` != 0 ]
  then
    echo -n "$j "
  fi
  j=`expr $j + 1`
done
echo -e ""