Aralık 12, 2011 § § Kalıcı bağlantı
Floating point karşılaştırması kesin midir?
#include <stdio.h>
int main()
{
float f=0.0f;
int i;
for(i=0;i<10;i++)
f = f + 0.1f;
if(f == 1.0f)
printf("f is 1.0 \n");
else
printf("f is NOT 1.0\n");
return 0;
}
Böyle bir karşılaştırma yerine şöle bir karşılaştırma kullanalım…
#include <stdio.h>
int main()
{
float f=0.0f;
int i;
for(i=0;i<10;i++)
f = f + 0.1f;
if ((f-1.0f)<0.00000000001f)
printf("f is 1.0 \n");
else
printf("f is NOT 1.0\n");
return 0;
}
Aralık 12, 2011 § § Kalıcı bağlantı
Bak şu sleep’in yaptığına!
Sizce aşağıdaki program ne döner???
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}
Ekim 16, 2011 § § Kalıcı bağlantı
#include stdio.h
int main()
{
printf("goodbye, dad\n");
return 0;
}
“UNIX is very simple, it just needs a genius to understand its simplicity.”
Dennis Ritchie
Rest in peace GREAT MAN!
Ağustos 17, 2011 § § Kalıcı bağlantı
Programı yazalım
$ vim factorial.c
# include <stdio.h>
int main()
{
int i, num, j;
printf ("Enter the number: ");
scanf ("%d", &num );
for (i=1; i<num; i++)
j=j*i;
printf("The factorial of %d is %d\n",num,j);
}
$ cc factorial.c
$ ./a.out
Enter the number: 3
The factorial of 3 is 12548672
gdb kullanabilmek için ”cc -g” ile compile edelim
$ cc -g factorial.c
Önce gdb yi a.out için çalıştırıyoruz.
$ gdb a.out
Sonra break point koyuyoruz
Syntax:
break line_number
*
break [file_name]:line_number
*
break [file_name]:func_name
break 10
Breakpoint 1 at 0x804846f: file factorial.c, line 10.
“run ” ile programı çalıştır
run [args]
run
Starting program: /home/sathiyamoorthy/Debugging/c/a.out
İlk break pointe kadar program çalışır eder
Breakpoint 1, main () at factorial.c:10
10 j=j*i;
Bu noktada debug edebiliriz
Değişken değerlerine bakalım
Syntax: print {variable}
Examples:
print i
print j
print num
(gdb) p i
$1 = 1
(gdb) p j
$2 = 3042592
(gdb) p num
$3 = 3
(gdb)
gdb ile kullanılabilecek diğer seçenekler
c (continue kısaltması): Bir sonraki break point e kadar sür.
n (next kısaltması): Birsonraki satırı sür
s (step kısaltması): n ile aynıdır fakat fonksiyon geldiğinde fonksiyonu tek satır olarak almaz fonksiyona gidip onu satır satır çalıştırır
Diğer seçeekler
l – list
p – print
c – continue
s – step
ENTER: bir önceki emri tekrar et
l command: Kaynak kodu görmek için kullanılır
bt: backtrack – Print backtrace of all stack frames, or innermost COUNT frames.
help – help TOPICNAME.
quit – çıkış
kaynak
Temmuz 21, 2011 § § Kalıcı bağlantı
- In C programming language, there is an external variable called “errno”.
- From this errno variable you can use some error handling functions to find out the error description and handle it appropriately.
- You have to include errno.h header file to use external variable errno.
perror function prints error description in standard error.
- The strerror function returns a string describing the error code passed in the argument errnum.
The following C code snippet tries to open a file through open system call. There are two flags in the open call. O_CREAT flag is to create a file, if the file does not exist. O_EXCL flag is used with O_CREAT, if the file is already exist open call will fail with the proper error number.
cat fileopen.c
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
main()
{
// Declaration of a file descriptor
int fd;
// Opening a file
fd = open("/root/sasikala/testing",O_CREAT|O_EXCL);
// If Open is failed
if ( fd < 0 ) {
printf("Opening file : Failed\n");
printf ("Error no is : %d\n", errno);
printf("Error description is : %s\n",strerror(errno));
}
// If Open is success
else
printf("Opening file : Success\n");
}
$ cc -o fileopen fileopen.c
$ ./fileopen
Opening file : Success
$ ./fileopen
Opening file : Failed
Error no is : 17
Error description is : File exists
Error number |
Error Code |
Error Description |
1 |
EPERM |
Operation not permitted |
2 |
ENOENT |
No such file or directory |
3 |
ESRCH |
No such process |
4 |
EINTR |
Interrupted system call |
5 |
EIO |
I/O error |
6 |
ENXIO |
No such device or address |
7 |
E2BIG |
Argument list too long |
8 |
ENOEXEC |
Exec format error |
9 |
EBADF |
Bad file number |
10 |
ECHILD |
No child processes |
11 |
EAGAIN |
Try again |
12 |
ENOMEM |
Out of memory |
13 |
EACCES |
Permission denied |
14 |
EFAULT |
Bad address |
15 |
ENOTBLK |
Block device required |
16 |
EBUSY |
Device or resource busy |
17 |
EEXIST |
File exists |
18 |
EXDEV |
Cross-device link |
19 |
ENODEV |
No such device |
20 |
ENOTDIR |
Not a directory |
21 |
EISDIR |
Is a directory |
22 |
EINVAL |
Invalid argument |
23 |
ENFILE |
File table overflow |
24 |
EMFILE |
Too many open files |
25 |
ENOTTY |
Not a typewriter |
26 |
ETXTBSY |
Text file busy |
27 |
EFBIG |
File too large |
28 |
ENOSPC |
No space left on device |
29 |
ESPIPE |
Illegal seek |
30 |
EROFS |
Read-only file system |
31 |
EMLINK |
Too many links |
32 |
EPIPE |
Broken pipe |
33 |
EDOM |
Math argument out of domain of func |
34 |
ERANGE |
Math result not representable |
35 |
EDEADLK |
Resource deadlock would occur |
36 |
ENAMETOOLONG |
File name too long |
37 |
ENOLCK |
No record locks available |
38 |
ENOSYS |
Function not implemented |
39 |
ENOTEMPTY |
Directory not empty |
40 |
ELOOP |
Too many symbolic links encountered |
42 |
ENOMSG |
No message of desired type |
43 |
EIDRM |
Identifier removed |
44 |
ECHRNG |
Channel number out of range |
45 |
EL2NSYNC |
Level 2 not synchronized |
46 |
EL3HLT |
Level 3 halted |
47 |
EL3RST |
Level 3 reset |
48 |
ELNRNG |
Link number out of range |
49 |
EUNATCH |
Protocol driver not attached |
50 |
ENOCSI |
No CSI structure available |
51 |
EL2HLT |
Level 2 halted |
52 |
EBADE |
Invalid exchange |
53 |
EBADR |
Invalid request descriptor |
54 |
EXFULL |
Exchange full |
55 |
ENOANO |
No anode |
56 |
EBADRQC |
Invalid request code |
57 |
EBADSLT |
Invalid slot |
59 |
EBFONT |
Bad font file format |
60 |
ENOSTR |
Device not a stream |
61 |
ENODATA |
No data available |
62 |
ETIME |
Timer expired |
63 |
ENOSR |
Out of streams resources |
64 |
ENONET |
Machine is not on the network |
65 |
ENOPKG |
Package not installed |
66 |
EREMOTE |
Object is remote |
67 |
ENOLINK |
Link has been severed |
68 |
EADV |
Advertise error |
69 |
ESRMNT |
Srmount error |
70 |
ECOMM |
Communication error on send |
71 |
EPROTO |
Protocol error |
72 |
EMULTIHOP |
Multihop attempted |
73 |
EDOTDOT |
RFS specific error |
74 |
EBADMSG |
Not a data message |
75 |
EOVERFLOW |
Value too large for defined data type |
76 |
ENOTUNIQ |
Name not unique on network |
77 |
EBADFD |
File descriptor in bad state |
78 |
EREMCHG |
Remote address changed |
79 |
ELIBACC |
Can not access a needed shared library |
80 |
ELIBBAD |
Accessing a corrupted shared library |
81 |
ELIBSCN |
.lib section in a.out corrupted |
82 |
ELIBMAX |
Attempting to link in too many shared libraries |
83 |
ELIBEXEC |
Cannot exec a shared library directly |
84 |
EILSEQ |
Illegal byte sequence |
85 |
ERESTART |
Interrupted system call should be restarted |
86 |
ESTRPIPE |
Streams pipe error |
87 |
EUSERS |
Too many users |
88 |
ENOTSOCK |
Socket operation on non-socket |
89 |
EDESTADDRREQ |
Destination address required |
90 |
EMSGSIZE |
Message too long |
91 |
EPROTOTYPE |
Protocol wrong type for socket |
92 |
ENOPROTOOPT |
Protocol not available |
93 |
EPROTONOSUPPORT |
Protocol not supported |
94 |
ESOCKTNOSUPPORT |
Socket type not supported |
95 |
EOPNOTSUPP |
Operation not supported on transport endpoint |
96 |
EPFNOSUPPORT |
Protocol family not supported |
97 |
EAFNOSUPPORT |
Address family not supported by protocol |
98 |
EADDRINUSE |
Address already in use |
99 |
EADDRNOTAVAIL |
Cannot assign requested address |
100 |
ENETDOWN |
Network is down |
101 |
ENETUNREACH |
Network is unreachable |
102 |
ENETRESET |
Network dropped connection because of reset |
103 |
ECONNABORTED |
Software caused connection abort |
104 |
ECONNRESET |
Connection reset by peer |
105 |
ENOBUFS |
No buffer space available |
106 |
EISCONN |
Transport endpoint is already connected |
107 |
ENOTCONN |
Transport endpoint is not connected |
108 |
ESHUTDOWN |
Cannot send after transport endpoint shutdown |
109 |
ETOOMANYREFS |
Too many references: cannot splice |
110 |
ETIMEDOUT |
Connection timed out |
111 |
ECONNREFUSED |
Connection refused |
112 |
EHOSTDOWN |
Host is down |
113 |
EHOSTUNREACH |
No route to host |
114 |
EALREADY |
Operation already in progress |
115 |
EINPROGRESS |
Operation now in progress |
116 |
ESTALE |
Stale NFS file handle |
117 |
EUCLEAN |
Structure needs cleaning |
118 |
ENOTNAM |
Not a XENIX named type file |
119 |
ENAVAIL |
No XENIX semaphores available |
120 |
EISNAM |
Is a named type file |
121 |
EREMOTEIO |
Remote I/O error |
122 |
EDQUOT |
Quota exceeded |
123 |
ENOMEDIUM |
No medium found |
124 |
EMEDIUMTYPE |
Wrong medium type |
125 |
ECANCELED |
Operation Canceled |
126 |
ENOKEY |
Required key not available |
127 |
EKEYEXPIRED |
Key has expired |
128 |
EKEYREVOKED |
Key has been revoked |
129 |
EKEYREJECTED |
Key was rejected by service |
130 |
EOWNERDEAD |
Owner died |
131 |
ENOTRECOVERABLE |
State not recoverable |