2012年1月12日 星期四

gcc Compiler

Introduction:
The GNU C compiler is an integral part of the GNU system and was initially written by Richard Stallman. At first it only compiled C code. Later a group of volunteers started maintaining it and GCC gained the ability to support different languages such a C++, Fortran, Ada and Java


Sample:
Three file
test.c
{{{

#include "test.h"

void test(void) {
}

}}}
test.h
{{{

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
void test (void);
#endif


}}}
header_test.c: include all content
{{{

#include
#include "test.h"

int main(int argc, char *argv[]) {
test();
}


}}}


Compiler order:
{{{
# Compiler the test as the object content
[Andy@localhost HEADERTEST]$ gcc -c test.c

# Linker test.o and compiler the main header file
[Andy@localhost HEADERTEST]$ gcc test.o header_test.c -o header_test

}}}





Reference:
http://stackoverflow.com/questions/672734/how-to-prevent-multiple-definitions-in-c
http://www.seas.upenn.edu/cets/answers/gcc.html

http://pages.cs.wisc.edu/~beechung/ref/gcc-intro.html

document:
http://www.google.com.tw/url?sa=t&rct=j&q=gcc+tutorial&source=web&cd=5&ved=0CEkQFjAE&url=http%3A%2F%2Fusers.encs.concordia.ca%2F~mokhov%2Fcomp444%2Ftutorials%2Fgcc.pdf&ei=ScsPT9DdGsmuiQfQlYgN&usg=AFQjCNEoLYzfKgvR2w45MaJgAV0X2E6gVQ&sig2=Jr5GLu6ZqRINbBsAjZxyzQ


http://falldog7.blogspot.com/2007/09/cc-function-definition-definitionh.html



Useful Linux command content
{{{{
-c : 只做編譯(不做連結)
-S : 輸出組譯碼
-E : 將預處理結果顯示
-o filename : 指定輸出檔名
-ansi : 程式要求依據ansi c標準
-Dmacro : 使定義巨集(marco)為有效
-Dmarco=defn : 使定義巨集(marco)為defn
-Wa,option : 將選項(option)傳給組譯器
-wl,option : 將選項(option)傳給連結器
-I : 追加include檔案的搜尋路徑
-L : 追加library檔案的搜尋路徑
-l : 指定連結的函式庫
-Wall : 顯示所有的警告訊息
-g : 編入除錯資訊(要使用GDB除錯一定要加)
-O2 : 做最佳化

Reference: http://www.wretch.cc/blog/Geniusking/7263728

}}}


Simple Link:
{{{
http://linux.vbird.org/
}}}



2012年1月11日 星期三

Usually Function

String:
  • strlen (const char *s) [http://www.gnu.org/software/libc/manual/html_node/String-Length.html]
  • sprintf (workName, "tTcpWork%d", ix++);


Byte Manipulate:

  • bzero (buffer,256)


File:

  • read (sFd, buffer, 255);
  • write (sFd, buffer, strlen (buffer))


Process:

  • fork()


Input/Ouput:

  • scanf /*Read is a token as yhou want*/
     int  scanf ( const char * format, ... );
  • gets(char *); /* Read the the stdin and is a string*/
  • fgets /*Read from the file */
    char * fgets ( char * str, int num, FILE * stream );

Notice: gets will generate dangerous problem, so can using the fgets.

http://dsewnr.blogspot.com/2007/05/c-gets.html

http://www.cplusplus.com/reference/clibrary/cstdio/scanf/


Forking

{{{

#include
void main(void) {
int pid, i;

pid = fork();

/*Child process the pid is zero at this */
if (pid ==0) {
printf("I am child and pid %d\n",getpid());
for (i=0; i < 44; i++) {
printf("I am chid and say %d\n", i);
}
}
else if (pid > 0) { /* Parent pid will use choild*/
printf("I am parent and pid %d\n",getpid());
for (i = 0; i < 40; i++) {
printf("I am parent process and say %d\n", i);
}
}
else if (pid < 0) {
printf ("Sorry, can't fork my self\n");
}
}


}}}

Reference:
http://forum.slime.com.tw/thread190607.html

Socket programing

Sample
  • http://www.linuxhowtos.org/C_C++/socket.htm
  • http://www-kryo.desy.de/documents/vxWorks/V5.5/vxworks/netguide/c-sockets.html

Writing and function list
http://www.retran.com/beej/index.html

Precedence of the operators






Reference:
http://en.cppreference.com/w/cpp/language/operator_precedence
http://www.swansontec.com/sopc.html

perror

Goal: will show the error number corresponding to string

Sample:

標頭檔: #include

函式定義: void perror(const char *s);

說明

perror 會將錯誤值對應到的錯誤訊息列印到標準錯誤串流中。

範例

/*perror 將錯誤編碼轉誠文字*/ #include   int main() {     FILE *stream;      if((stream = fopen("open", "r")) == NULL){  perror("fopen");     }      return 0; }


Output:
fopen: No such file or directory

Data Type Change

atoi (asci to integer)

Reference:http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/


atoi
function


int atoi ( const char * str );

Convert string to integer
Parses the C string str interpreting its content as an integral number, which is returned as an int value.

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

2012年1月10日 星期二

Data type

http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx


Type Name Bytes Other Names Range of Values

int


4


signed


–2,147,483,648 to 2,147,483,647

unsigned int


4


unsigned


0 to 4,294,967,295

__int8


1


char


–128 to 127

unsigned __int8


1


unsigned char


0 to 255

__int16


2


short, short int, signed short int


–32,768 to 32,767

unsigned __int16


2


unsigned short, unsigned short int


0 to 65,535

__int32


4


signed, signed int, int


–2,147,483,648 to 2,147,483,647

unsigned __int32


4


unsigned, unsigned int


0 to 4,294,967,295

__int64


8


long long, signed long long


–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned __int64


8


unsigned long long


0 to 18,446,744,073,709,551,615

bool


1


none


false or true

char


1


none


–128 to 127 by default

0 to 255 when compiled with /J

signed char


1


none


–128 to 127

unsigned char


1


none


0 to 255

short


2


short int, signed short int


–32,768 to 32,767

unsigned short


2


unsigned short int


0 to 65,535

long


4


long int, signed long int


–2,147,483,648 to 2,147,483,647

unsigned long


4


unsigned long int


0 to 4,294,967,295

long long


8


none (but equivalent to __int64)


–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned long long


8


none (but equivalent to unsigned __int64)


0 to 18,446,744,073,709,551,615

enum


varies


none


See Remarks.

float


4


none


3.4E +/- 38 (7 digits)

double


8


none


1.7E +/- 308 (15 digits)

long double


same as double


none


same as double

wchar_t


2


__wchar_t


0 to 65,535

Big And Little Endian

http://www.linuxhowtos.org/data/6/byteorder.html

Big endian and Little endian computers

Virtually all computer architectures are byte addressable. If an int is four bytes, there are two different ways to store this. Suppose the address of the int is A. In a so-called big endian computer, the highest order byte is stored at A, and the lowest order byte is stored at address A+3. In a so-called little endian computer, address A stores the least significant byte and the most significant byte is at address A+3.

Big endian computer architectures include the IBM 370, the Motorola 68000 and Sun Sparc. Little endian computers include the intel series (80486, pentium etc) and VAX.

Consider the decimal integer 91,329. This is 00 01 64 C1 in hexidecimal. If this were to be stored at address A in a big endian computer, 00 would be at address A, 01 at address A+1 64 at address A+2, and C1 at address A+3. On a little endian computer, C1 would be the value at address A, 64 at address A+1, 01 at address A+2, and 00 at address A+3.

Computer networks are big endian. This means that when little endian computers are going to pass integers over the network (IP addresses for example), they need to convert them to network byte order. Likewise, when the receive integer values over the network, they need to convert them back to their own native representation.

There are four functions that do this.

unsigned long htonl(unsigned long)
host to network conversion for long ints (4 bytes)
unsigned short htons(unsigned short)
host to network conversion for short ints (2 bytes)
unsigned long ntohl(unsigned long)
network to host conversion for long ints
unsigned short ntohs(short)
network to host conversion for short ints

On big endian computers these functions simply return their arguments.

The terms big endian and little endian are borrowed from Gulliver's Travels.

Socket Coding Function

inet_ntoa(), inet_aton(), inet_addr

Convert IP addresses from a dots-and-number string to a struct in_addr and back

Prototypes

#include  #include  #include   // ALL THESE ARE DEPRECATED!  Use inet_pton()  or inet_ntop() instead!!  char *inet_ntoa(struct in_addr in); int inet_aton(const char *cp, struct in_addr *inp); in_addr_t inet_addr(const char *cp);


Reference:
http://www.retran.com/beej/inet_ntoaman.html

2012年1月9日 星期一

Header File and Include

Method 1: (Not very rigid)
1. Sometimes you wll write a sub module in the other file
2. then you didn't link it.
3. and can call it.



Method 2: (Serious)
1. you should Define function name before each function usage
2. you should add the header file.



{{{
Time_C.cpp

#include "vxWorks.h"
#include "timexLib.h"
#include "stdio.h"


#define ITERATIONS 200

/*Function Define Region */
int printit(void);
void timing(void);


void timing(void) {
printit();
}

int printit(void) {
int i;
for (i=0; i < ITERATIONS; i++) {
printf("Hello, I am i %d\n", i);
}
}

////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
Add the 'include ' Time_C content, then use the timeing
////////////////////////////////////////////////////////////
/* Define user function */
#include "Time_C.cpp"

void usrAppInit (void) {
#ifdef USER_APPL_INIT
USER_APPL_INIT; /* for backwards compatibility */
#endif

/* add application specific code here */
timing();
}





}}}