
Now I can read about C out of computer :P
#include <stdio.h> static int Optindx = 1; static char *Optarg = NULL; short int chstr (char ch, char *str) { for (; *str; str++) if (ch == *str) return 0; return -1; } char * search_arg(char **argv) { char *ptr; if (argv[Optindx+1] == NULL) return 0; while (*(ptr = argv[++Optindx]) != '-') if (argv[Optindx] = NULL) return 0; return ptr; } int get_opts(char **argv, char *legal) { int letter = 0; if (Optarg == NULL) if (*(Optarg = argv[Optindx]) != '-') if ((Optarg = search_arg (argv)) == 0) return -1; if (*Optarg == '\0') if ((Optarg = search_arg (argv)) == 0) return -1; if (*(Optarg+1) == '-') { return -1; Optarg++; return 0; } if (chstr (*Optarg, legal) == 0) return letter = *Optarg++; else return '?'; } /* to Test */ int main (int argc, char *argv[]) { int ch; if (argc < 2) return -1; while ((ch = get_opts(argv, "abc")) != -1) { switch (ch) { case 'a': putchar ('a'); break; case 'b': putchar ('b'); break; case 'c': putchar ('c'); break; case '?': fprintf (stderr, "Unknown argument %c\n", *Optarg); return -1; } } putchar ('\n'); return 0; }It parses 1char arguments, that can be passed in any order.
#include <stdio.h> #include <string.h> #include <errno.h> #include <fcntl.h> #define crpt(byte,key) (byte^key) int main (int argc, char *argv[]) { int f1, f2, n; char unbuf; if (argc < 4) error (-1, EINVAL, "Error, argument fault", argv[0]); if ((strlen (argv[3])) <= 2) error (-1, EINVAL, "Error, encyrpt key is " "too short (less then 3 characters)"); if ((f1 = open (argv[1], O_RDONLY)) == -1) err (-1, "Error, while trying to open " "file %s for read", argv[1]); if ((f2 = creat (argv[2], 0644)) == -1) err (-1, "Error, while trying to create/open " "file %s for write", argv[2]); while ((n = read (f1, &unbuf, 1)) > 0) { char *key = argv[3]; if ((key+1) == '\0') key = argv[3]; unbuf = crpt(unbuf, *key); if ((write (f2, &unbuf, 1)) == -1) err(-1, "Error while trying to write " "in file %s", argv[2]); key++; } return 0; }usage: ./ecrypt source_file encrypted_file crypt_key
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ENCRYPT(a,b) (encrypt_decrypt (a, b)) #define DECRYPT(a,b) (encrypt_decrypt (a, b)) signed char * encrypt_decrypt (char *str, char *key) { char *crp_str, *addr; crp_str = addr = (char *) malloc (strlen (str)); if (crp_str == 0) return (char *)-1; for (; *str; str++, key++, crp_str++) *crp_str = *str ^ *key; *crp_str = '\0'; return addr; } int main (void) { char *str; str = ENCRYPT ("Hello World", "Im nice guy"); printf ("%s\n", DECRYPT (str, "Im nice guy")); return 0; }
/* * An obstack is a pool of memory * containing a stack of objects */ #include <stdio.h> #include <stdlib.h> #include <obstack.h> #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free #define obstack_alloc_fail_handler (fprintf (stderr, "Memory exhausted\n"); exit (EXIT_FAILURE);) static struct obstack string_obstack; void * xmalloc (size_t size) { register void *value = malloc (size); if (value == 0) return 0; return value; } char * copystring (struct obstack *obstack_ptr, char *string) { size_t len = strlen (string) + 1; char *s = (char *) obstack_alloc (obstack_ptr, len); memcpy (s, string, len); return s; } int main (void) { char *str; obstack_init (&string_obstack); str = copystring (&string_obstack, "Hello World"); printf ("%s\n", str); obstack_free (&string_obstack, str); return 0; }
#include <stdio.h> #include <errno.h> int main (int argc, char **argv) { FILE *fp; char *line, buf[99]; if (argc < 2) return -1; argv++; for (; argc > 1; argc--, argv++) { if (! (fp = fopen (*argv, "r"))) error (1,errno); while ((line = fgets(buf, 99, fp)) != NULL) printf ("%s: %s", *argv, line); } return 0; }
char *ar[10], **ps, *str = "Hello World"; ps = ar; **ps = *str; /* segment fault here */
#!/bin/bash if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] then echo "Usage: $0 <num of pages> <first page> <file>" exit 1 fi NUM_OF_PAGES=$(( $1-1 )) FIRST_PAGE=$2 FILE=$3 EVEN_PAGES=$(seq $(( ${FIRST_PAGE}+1 )) 2 $((${FIRST_PAGE} + ${NUM_OF_PAGES}))) ODD_PAGES=$( revv $(seq ${FIRST_PAGE} 2 $(( ${FIRST_PAGE} + ${NUM_OF_PAGES} )) ) ) EVEN_PAGES=$(echo $EVEN_PAGES | tr -s '\n' ' ') if [ "$4" == "-d" ] then echo $NUM_OF_PAGES echo $FIRST_PAGE echo $FILE echo "ODD $ODD_PAGES" echo "EVEN $EVEN_PAGES" exit -1 fi for PAGE in $EVEN_PAGES do lp -P $PAGE $FILE sleep 0.5 done echo echo "*******************************************" echo "*** ***" echo "*** WAIT UNTIL THE PRINT FINISHES ***" echo "*** THEN SWAP THE PAPER AND PRESS ENTER ***" echo "*** ***" echo -n "*******************************************" read echo for PAGE in $ODD_PAGES do lp -P $PAGE $FILE sleep 0.5 donebasicly this help you to save paper...
/* * This program reverse the order of its arguments * e.g AB CD EF become EF CD AB */ #include <stdio.h> int main (int argc, char **argv) { argc--; for (; argc > 0; argc--) printf("%s ", argv[argc]); return 0; }
#include <stdio.h> #include <stdlib.h> void * xmalloc (size_t size) { void *malloc(); register void *value = malloc (size); if(value == 0) error("Virtual memory exhausted"); return (value); } char * savestring (const char *ptr, size_t len) { register char *value = (char *) xmalloc (len + 1); value[len] = '\0'; return (char *) memcpy (value, ptr, len); } int main (void) { char *str; str = savestring ("Hello World", 12); printf("%s\n", str); return(0); }xmalloc check if malloc successfully allocate the memory that you need
#include <stdio.h> int main(void) { char buf[BUFSIZ]; int n; while((n = read(0, buf, BUFSIZ)) > 0) write(1, buf, n); return(0); }use: minicat.o < file
#include <stdio.h> #include <dirent.h> static int one(struct dirent *unused) { return(1); } int main(void) { struct dirent **eps; int n; n = scandir("./", &eps, one, alphasort); if(n >= 0) { int cnt; for(cnt = 0; cnt < n; cnt++) puts(eps[cnt]->d_name); } else perror("Couldn't open the diretory"); return(0); }
#!/bin/bash # Rename files on the current directory, changing spaces to underscore.. recursive # Author: Daniel Hilst HELPMSG="Options:\v-h\tGive this help message\n\t-v\tPrint errors on stderr" TURN=1 DIRS=$(find . -maxdepth ${TURN} -type d -name "* *") DBUG="/dev/null" IFS=" " if [ "$1" == "-h" ]; then echo -e ${HELPMSG} exit 1 fi if [ "$1" == "-v" ]; then DBUG="/dev/stderr" fi mvFiles() { FILES=$(find . -type f -name "* *") for FILE in ${FILES}; do echo -n "Renaming ${FILE} ..." mv ${FILE} $(echo ${FILE} | tr -s " " "_") && { echo "done"; } || { echo "fail"; } done } mvDir() { let TURN++; for DIR in ${DIRS}; do echo -n "Renaming ${DIR} ..." mv ${DIR} $(echo ${DIR} | tr -s " " "_") 2> ${DBUG} && { echo "done"; } || { echo "fail"; } done DIRS=$(find . -maxdepth ${TURN} -type d -name "* *") if [ ! -z "${DIRS}" ]; then mvDir fi } mvDir mvFiles #EOFRename files changing spaces to underscore.. recursive
#include <stdio.h> #include "bit.h" int main(int argc, char **argv) { unsigned byte; argv++; for(; argc > 1; argc--, argv++) { byte = Bit2Byte(*argv); putchar((char)byte); } putchar('\n'); return(0); }INPUT: hello-world-bin.o 01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100
#define OFF 48 /* char '0' */ #define ON 49 /* char '1' */ unsigned int Bit2Byte(char *string) { unsigned byte = 0, tmp = 128; for(; *string; string++) { (*string==ON) ? byte += tmp : 0; tmp /= 2; } return(byte); } void PrintBit(int integer) { (integer & 128)?putchar('1'):putchar('0'); (integer & 64)?putchar('1'):putchar('0'); (integer & 32)?putchar('1'):putchar('0'); (integer & 16)?putchar('1'):putchar('0'); (integer & 8)?putchar('1'):putchar('0'); (integer & 4)?putchar('1'):putchar('0'); (integer & 2)?putchar('1'):putchar('0'); (integer & 1)?putchar('1'):putchar('0'); }2 funtions 2 macros... :p
#include <stdio.h> void PrintBit(int integer) { (integer & 128)?putchar('1'):putchar('0'); (integer & 64)?putchar('1'):putchar('0'); (integer & 32)?putchar('1'):putchar('0'); (integer & 16)?putchar('1'):putchar('0'); (integer & 8)?putchar('1'):putchar('0'); (integer & 4)?putchar('1'):putchar('0'); (integer & 2)?putchar('1'):putchar('0'); (integer & 1)?putchar('1'):putchar('0'); } int main(int argc, char **argv) { unsigned uns; argv++; for(; argc > 1; argc--, argv++) { uns = atoi(*argv); printf("%3d: ", uns); PrintBit(uns); putchar('\n'); } return(0); }
#include <stdio.h> void PrintBit(int integer) { (integer & 128)?putchar('1'):putchar('0'); (integer & 64)?putchar('1'):putchar('0'); (integer & 32)?putchar('1'):putchar('0'); (integer & 16)?putchar('1'):putchar('0'); (integer & 8)?putchar('1'):putchar('0'); (integer & 4)?putchar('1'):putchar('0'); (integer & 2)?putchar('1'):putchar('0'); (integer & 1)?putchar('1'):putchar('0'); putchar(' '); } int main(int argc, char **argv) { char *str = argv[1]; for(; *str; str++) PrintBit(*str); putchar('\n'); return(0); }INPUT: ./hello_bin.o "Hello World"
#include <stdio.h> #include <errno.h> int main(void) { FILE *fp; char ch; if(!(fp = fopen(__FILE__, "w+"))) { fprintf(stderr, "%s\n", strerror(errno)); return(1); } fprintf(fp, "Hello World\n"); rewind(fp); while((ch = getc(fp)) != EOF) putchar(ch); return(0); }
#include <stdio.h> #include <errno.h> int main(void) { FILE *fp; char ch; if(!(fp = fopen("t.c", "r"))){ fprintf(stderr, "%s\n", strerror(errno)); return(1); } printf("I'm the file, my name is %s!\n", __FILE__); printf("and my content is:\n"); while((ch = getc(fp)) != EOF) putchar(ch); return(0); }
#include <stdio.h> int main(int *argc, char *argv[]) { FILE *fp; short indx; char ch; for(indx=1; argv[indx] != 0; indx++) { printf("file -> %s\n", argv[indx]); if(!(fp = fopen(argv[indx], "r"))) { fprintf(stderr, "Error while trying " "to read file: %s\n", argv[indx]); return(1); } while((ch = getc(fp)) != EOF) putchar(ch); fclose(fp); putchar('\n'); } return(0); }