C语言学习
文章平均质量分 55
hello-world2016
热爱Linux和开源, 喜欢编程,看书, 听音乐 和篮球。
展开
-
从文件写入和读取结构体示例代码
/****************************************************** author :杨志永* date :2012-04-15* E-mail:ljy520zhiyong@163.com* QQ :929168233** filename:structs_io.c** Sytem:Debian 6.0.4* GCC:4.6原创 2012-05-11 22:48:55 · 1308 阅读 · 0 评论 -
<setjmp.h>非局部跳转(来自C语言程序设计--现代方法第二版)
int setjmp(jmp_buf env);void longjmp(jmp_buf env, int val); 可以使得一个函数直接跳转到另一个函数,而不需要返回。 setjmp宏“标记”程序中的一个位置;随后可以使用longjmp跳转到该位置。 注意:setjmp会在第一次调用时返回0;随后,longjmp将控制权重新转给最初的setjmp宏调用,而setjmp原创 2012-05-14 10:52:04 · 2188 阅读 · 0 评论 -
C语言中的可变参数
1.包含头文件 :,它声明了一种类型,并定义了(C89)几个宏:va_start, va_arg和va_end。C99中还增加了一个类似函数的宏va_copy。2.要想获取可变参数。必须声明va_list类型的变量来接收可变参数。 va_list ap; 然后将这个“指针”指针到开头。即第一个可变参数:va_start(ap, n);这里的n为可变参数列表中的第一个参数的名原创 2012-05-14 15:00:24 · 912 阅读 · 0 评论 -
Debian下用C连接MySQL
1.首先安装mysql-server , mysql-client:sudo apt-get install libmysqlclient16 mysql-server mysql-client libmysqlclient-dev2.示例代码:/**********************************************原创 2012-05-17 19:52:21 · 1321 阅读 · 0 评论 -
Windows下C语言连接MySQL
1.把安装好的MySQL目录里的libmySQL.dll复制到C:\Windows\system32\下(我的是win7,还要添加到:C:\Windows\SysWOW64目录中);2.把MySQL的头文件添加到环境中:3.把libmysql.lib添加到VS 2010的项目中。4.示例代码:/************************************原创 2012-05-17 13:59:26 · 7310 阅读 · 5 评论 -
查看CPU的大小端模式
大小端:CPU对内存单元数据的排列顺序的方式. 采用小端(Little-endian)模式的CPU对操作数的存放方式是从低字节到高字节(从右到左即从低到高);这是X86平台采用的模式; 采用大端(Big-endian)模式对操作数的存放方式是从高字节到低字节;在网络上传送的数据采用的方式;例如:16bits宽的数:0x1234在Little-endian模式的CPU中内原创 2012-05-17 20:12:25 · 2653 阅读 · 0 评论 -
求两个数相乘结果的位数
printf("位数为:%d\n", (int)ceil( ((log(a)+log(b)) / (log(10)) )));原创 2012-05-18 16:35:38 · 1865 阅读 · 0 评论 -
大数相乘
#include #include using namespace std; void multiply(const char *a,const char *b); int main() { //cout<<"hicjiajia"<<endl; string num1,num2; // 初始状态用string来存储大数转载 2012-05-18 17:33:38 · 559 阅读 · 0 评论 -
大数相乘——自己仿写版
#include #include #include char * BigNumberMulti(const char * a, const char *b);int main(void){ const char * a = "999999999999999999999999999999999999999999999999999999999999999999999999999999原创 2012-05-18 22:22:11 · 1018 阅读 · 0 评论 -
整数大数减法
#include #include #include char * BigNumberSubtration(const char *a, const char *b);int main(void){ int isSwap = 0; char *a = "998879879465498765794657984987465413215679879465498461324原创 2012-05-19 16:51:44 · 710 阅读 · 0 评论 -
整数大数加法
#include #include #include char * BigNumberAdd(const char *a, const char *b);int main(void){ const char * a = "9879797978979798797"; const char * b = "97979797987979797979797979797987"; char原创 2012-05-19 10:36:00 · 723 阅读 · 0 评论 -
程序员十戒
1. 保持清醒头脑(不要急躁)2. 充分休息好再工作(劳累时不要编写程序)3. 程序应该简单、优美(Kiss, 即Keep It Simple, Sweetie)4. 互助互利5. 学习掌握语言规则6. 熟悉开发环境和工具7. 理解问题的本质8. 分阶段开发和测试程序9. 早保存/勤保存10原创 2012-08-25 14:25:35 · 705 阅读 · 0 评论 -
VC中使用C内联汇编小例子
#include int main() { int x = 1; int y = 1; int z = 0; __asm { xor edx,edx ;edx=0 add edx,x ;edx +=x add edx,y ;edx +=y mov z,edx ;z=edx } printf("From ASM inline C: \n"); printf("原创 2012-11-19 10:10:12 · 1033 阅读 · 0 评论 -
Linux下C内联汇编小例子
/* ============================================================================ Name : GCC.c Author : Gentoo Version : Copyright : Your copyright notice Description : Hello Wor原创 2012-11-19 23:17:16 · 920 阅读 · 0 评论 -
Linux X86_64下的32位汇编环境
1.汇编: as -32 -o hello.o hello.s 2.链接: ld -dynamic-link /lib/ld-linux.so.2 -lc -melf_i386 hello.o -o hello原创 2012-11-22 15:55:02 · 1257 阅读 · 0 评论 -
C统计1-49的数字出现的次数
/* * main.c * * Created on: Jan 23, 2013 * Author: linux 杨志永 * QQ : 929168233 * Email : ljy520zhiyong@163.com * */#include #include #include #include //数组的长度(一共49个数字原创 2013-02-04 10:43:40 · 6512 阅读 · 0 评论 -
C标准中qsort()函数
原型:void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 其中,base必须指向数组中的第一个元素。(如果只是对数组中的一段区域进行排序,那么要使base指向这段区域的第一个元素。)在一般情况下,base就是数组的名字。nmemb是要排序元素的原创 2012-05-13 10:51:43 · 666 阅读 · 0 评论 -
内存分配函数
1.为了动态地分配内存空间,可调用三种内存分配函数中的一种.这些函数都是声明在头文件中: 1) malloc函数--分配内存块,但是不对内存块进行初始化 2) calloc函数--分配内存块,并且对内存块进行初始化 3) realloc函数--调整先前分配的内存大小. 这三种函数中,malloc函数是最常用的一种.因为malloc函数不需要对分配的内原创 2012-05-12 09:30:05 · 804 阅读 · 0 评论 -
Linux信号中断处理
1.kill产生一个信号: extern int kill (__pid_t __pid, int __sig); pid>0:将信号发送给进程的pid为pid的进程; pid=0:将信号发送给和当前进程在同一个进程组的所有进程; pid=-1:将信号发送给系统内的所有进程; pid 成功返回0;失败返回值-1.2.raise自举一个信号: e原创 2012-05-12 08:18:36 · 792 阅读 · 0 评论 -
Linux C获取下载和上传的网速V3
/** 作者:杨志永* 日期:2012-04-17 10:10 * Email:ljy520zhiyong@163.com* QQ:929168233* * 文件名: watch_network_speed.c* 编译环境:Debian 6.0.4 Testing, GCC 4.6.3 X86_64* * 功能:获取Linux系统下的下载和上传的网速**/#include原创 2012-05-12 08:11:32 · 1600 阅读 · 0 评论 -
Linux下进程管理与控制
1.创建进程: extern __pid_t fork(void); 成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。 失败则在父进程中返回-1; 说明:子进程从创建后和父进程「同时」执行;竞争系统资源,子进程的执行位置为fork的返回位置。 extern __pid_t vfork(void); 成功则在父进程中返回子进程的PI原创 2012-05-12 08:15:40 · 773 阅读 · 0 评论 -
Linux下线程操作
1.创建线程:pthread_t 实质上是unsigned long int 类型。 extern int pthread_create(pthread_t *__restrict __newthread, __const pthread_attr_t *__restrict __attr, __void *(*__start_rout原创 2012-05-12 08:16:46 · 604 阅读 · 0 评论 -
Linux和Windows下刷新缓冲区
1. 使用 fflush(stdin); 或 rewind(stdin); 均可起到清空键盘缓冲区的作用,这两个函数均包含在stdio.h这个头文件中。但它们只适用于Windows系统。2.最具移植性的做法,使用以下函数: void setbuf(FILE *restrict stream, char *restrict buf); setbuf(stdin, NULL);原创 2012-05-12 08:17:30 · 958 阅读 · 0 评论 -
一个复杂一点的单向链表
/*********************************************************************************** * * 作者:杨志永 ** 日期:2012-05-13原创 2012-05-12 17:52:41 · 813 阅读 · 0 评论 -
判断自己计算机的字节对齐大小
#include #include #define N 80struct Student{ int age; char sex[5];};int main(void){ struct Student student = {.age=10, .sex="yang"}; printf("sizeof student is %d\n", sizeof(原创 2012-05-11 20:34:10 · 1186 阅读 · 0 评论 -
ANSI C 中的 printf
1.long : %ld2.long unsigned int : %lu3.double : %lf4.float : %f5.char : %c6. int : %d7.指针: %p8.八进制: %o9.十进制,八进制,十原创 2012-05-11 22:47:23 · 676 阅读 · 0 评论 -
printf()和sprintf()的返回值
二者的返回值为输出的信息的字符个数。包括特殊字符,如控制字符,空格。#include #include int main(void){ int i = printf("I Love You\n"); printf("i is %d\n", i); exit(EXIT_SUCCESS);}输出结果为:i is 11原创 2012-05-11 22:50:05 · 1527 阅读 · 0 评论 -
文件描述符
对于内核: Linux在内核源文件/usr/src/kernel/`uname -r`/include/linux/fs.h中定义了struct file结构是用来保存打开文件基本信息的。 对于用户空间来说: 任何打开的文件都将被分配一个唯一非负整数,用于标识该打开文件,该值即为文件描述符,它是一个大于等于0的整数。在任何进程运行时默认都已经打开了三个流对象和它们的文件描述原创 2012-05-11 22:50:36 · 741 阅读 · 0 评论 -
POSIX标准下文件IO管理
1、打开文件: extern int open (__const char * __file, int __oflag, ...); 成功则返回该文件的描述符;否则返回-1. flags: O_RDONLY:以只读方式打开文件 O_WRONLY:以写方式打开文件 O_RDWR:以可读可写方式打开文件 O_CREATE:若打开的文件不存在,则自动原创 2012-05-11 22:51:11 · 1221 阅读 · 0 评论 -
用Linux C语言获取当前网速
/******************************************************* 作者:杨志永* 日期:2012-4-16 4:35PM* E-mail:ljy520zhiyong@163.com* QQ:929168233** filename: watch_net_speed.c* 编译环境:Debian 6.0.4 Testing + GCC原创 2012-05-11 22:52:05 · 6025 阅读 · 0 评论 -
Linux C下获取下载和上传的网速V2
/** 作者:杨志永* 日期:2012-04-17 10:10 * Email:ljy520zhiyong@163.com* QQ:929168233* * 文件名: watch_network_speed.c* 编译环境:Debian 6.0.4 Testing, GCC 4.6.3 X86_64* * 功能:获取Linux系统下的下载和上传的网速**/#include原创 2012-05-11 22:52:56 · 1832 阅读 · 2 评论 -
Linux下获取进程信息
1.获取当前进程号:(pid_t 实质是int类型) extern __pid_t getpid(void); 成功则返回当前进程号;失败则返回-1;2.获取父进程号: extern __pid_t getppid(void); 成功则返回当前进程的父进程号;失败则返回-1;3.获取进程组号: extern __pid_t getpgid(__原创 2012-05-12 08:15:05 · 1306 阅读 · 0 评论 -
Linux下的进程间通信PIPE
1.创建无名管道: extern int pipe (int __piepedes[2]) __THROW _wur; pipedes[0]:用来完成读操作 pipedes[1]:用来完成写操作 失败则返回回-1。2.读无名管道:ssize_t 即为unsigned int 类型。 extern ssize_t read (int __fd, void *原创 2012-05-12 08:16:15 · 842 阅读 · 0 评论 -
Linux下的Socket基础编程(2)
#include #include #include # include #include #include #include #include #include #define BIND_PORT 9999#define BUFFSZ 4096int main(int argc, char * argv[]){ //extern int socket (int __原创 2013-02-10 10:38:26 · 930 阅读 · 0 评论