随笔分类 - c
摘要:原文链接常常觉得,我对很多东西都是要求会用就好,不求甚解。比如说每次一遇到文件操作,我必要查查相关的API和例子,然后依样画葫芦写下来。或许正是因为这种不求甚解的态度,让我一直处于半桶水的状态。看完了《C专家编程》后,觉得很多东西里面有包含了很多学问;开了博之后,常常希望写点有用的东西,有点像记笔记了,呵呵。记笔记有一个好处,就是要求你必须对现有的知识进行整理,然后才能有条理地写下来。昨天写算法的时候又遇到文件操作的东西了,这次索性把相关的API都整理出来,当是记了一回笔记了。在对文件进行操作之前,要先打开文件,使用完毕后,要关闭文件。文件操作相关的API如下:C代码#include <
阅读全文
摘要:原文链接表头文件 #include(stdio.h)<stdio.h>定义函数 int sscanf (const char *str,const char * format,........);函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。周星星的代码:#include<stdio.h>intmain(){constchar*s="iios/12DDWDFF@122";
阅读全文
摘要:原文链接今天翻google reader的时候看到这样一篇文章,介绍的是sscanf的高级用法。直到今天我才知道sscanf是可以直接用正则表达式的,惭愧。在msdn中sscanf的声明如下int sscanf( const char *buffer, const char *format[,argument] ... );双字节版本的是这样的int swscanf( const wchar_t *buffer, const wchar_t *format[,argument] ... );第一个参数是源字符串,这没什么好讲。第三个及以后的参数是可变参数列表,用于接收解析出来之后的值,可变参数
阅读全文
摘要:原文链接20 世纪 90 年代,UNIX 应用程序开始支持长选项,即一对短横线、一个描述性选项名称,还可以包含一个使用等号连接到选项的参数。GNU提供了getopt-long()和getopt-long-only()函数支持长选项的命令行解析,其中,后者的长选项字串是以一个短横线开始的,而非一对短横线。getopt_long() 是同时支持长选项和短选项的 getopt() 版本。下面是它们的声明:#i nclude <getopt.h>int getopt_long(int argc, char * const argv[], const char *optstring, con
阅读全文
摘要:原文链接 参考 gnu 文档 longoptLinux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个专门设计来减轻命令行处理负担的库函数。1、命令行参数命令行程序设计的首要任务是解析命令行参数,GUI派的程序员很少关心这个。这里,对参数采用了一种比较通俗的定义:命令行上除命令名之外的字符串。参数由多项构成,项与项之间用空白符彼此隔开。参数进一步分为选项和操作数。选项用于修改...
阅读全文
摘要:c 取模p_stu_back->pageAct = (hes->m_nCntHits % pInputs->npagesize ==0)? (hes->m_nCntHits / pInputs->npagesize): (hes->m_nCntHits / pInputs->npagesize +1);
阅读全文
摘要:递归调用#include <stdio.h>longint func(longint value ){if(value !=1){ return value = value*value + func(value -1);}else{return1;}}int main(){longint value = func(100);printf("%ld\n\n", value);return0;}
阅读全文
摘要:cmallocchar* desStr = (char*)malloc(10);memset(desStr, '1', 9); desStr[9] ='\0';free(desStr);desStr = NULL;
阅读全文
摘要:原文地址:http://www.cnblogs.com/jjyjjyjjy/archive/2011/04/23/2024828.html C code: #include <stdio.h> extern add(int,int); int main(int argc,char **argv) { int result = add(4,5); printf("result:%d\n",result); } assembly code: ;nasm -f elf add.s -o add.o [section .data] ...
阅读全文
摘要:开始:c:#include <errno.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h> int main ( int argc, char *argv[] ) { ...
阅读全文
摘要:参考地址:http://blog.csdn.net/ysdaniel/article/details/6667204//============================================================================// Name : objc.cpp// Author : // Version :// Copyright : Your copyright notice// Description : Hello World in C, Ansi-style//=====================...
阅读全文
摘要:原文地址:http://blog.minidx.com/2009/03/03/2209.html项目中经常用到各种不同的语言的朋友们应该会比较有这样的体会:一种开发语言用了比较长的时间,突然间转到另外一种语言的话,不管是数据类型或者语法结构,多多少少都会有那么一点不适应。哪怕MFC中的类型与标准C++也是一样的。下面是MFC/C++/C中字符类型CString, int, string, char*之间的转换的说明与举例,经常用的东西,相信对于用C/C++的朋友,还是比较有用的。1CString,int,string,char*之间的转换string转CStringCString.format
阅读全文
摘要:原文地址:http://www.dutor.net/index.php/2009/07/linux-timer/Linux 定时器Linux 为每个进程提供了三个定时器:ITIMER_REAL: 给一个指定的时间间隔,按照实际的时间来计数,发出SIGALRM信号;ITIMER_VIRTUAL: 当进程执行的时候才计数,发出SIGVTALRM信号;ITIMER_PROF: 当进程执行或者是系统为进程调度的时候计数,发出SIGPROF信号。这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。两个提供定时参数的结构体定义:strcut timeval{ //~ 秒 long t
阅读全文
摘要:原文地址:http://www.cnblogs.com/feisky/archive/2009/12/09/1620396.html一、简单排序算法1.冒泡法:这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上 而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。冒泡排序是稳定的。算法时间复杂度O(n^2)。void BubbleSort(int *pData, int Count){ int temp,i,j; for
阅读全文
摘要:原文地址:http://www.cnblogs.com/feisky/archive/2009/10/23/1588737.html所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。在这里,为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在 Linux 中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核
阅读全文
摘要:原文地址:http://www.cnblogs.com/feisky/archive/2009/10/25/1589613.html 进程是程序的一次执行, 是运行在自己的虚拟地址空间的一个具有独立功能的程序. 进程是分配和释放资源的基本单位, 当程序执行时, 系统创建进程, 分配内存和 CPU 等资源; 进程结束时, 系统回收这些资源。 进程由PCB(进程控制块)来描述:进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。进程的状态,有运行、挂起、停止、僵尸等状态。进程切换时需要保存和恢复的一些CPU寄存器。描述虚拟地址空间的信息。描述控制终端的信息。
阅读全文
摘要:原文地址:http://www.cnblogs.com/feisky/archive/2009/11/11/1600986.htmlLinux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明:头文件:<unistd.h><sys/mman.h>原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize);返回值: 成功则返回映射区起始地址, 失
阅读全文
摘要:原文地址:http://www.cnblogs.com/feisky/archive/2009/10/23/1588771.htmlLinux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。串口简介串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制
阅读全文
摘要:原文地址:http://blog.csdn.net/hairetz/article/details/4134446关于指针,觉得有点意思就发上我的注释,大家分析下,可以练练基本功。struct S{int i;int *p;};main(){S s;int *p=&s.i; //p指向s的首地址p[0]=4; //处理s.ip[1]=3; //s.p =3s.p=p; //s.p指向s的首地址s.p[1]=1; //s.p[1]就是s里的p,p=0x00000001s.p[0]=2; //操作0x00000001地址,代码在此处挂掉}这里虽然是在最后面才挂掉,但是野指针早在p[1]=3
阅读全文
摘要:client.c#include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #define BUFFSIZE 32 void Die(char *mess) { perror(mess); exit(1); } int main(int argc, char *argv[])
阅读全文