C语言库函数名: atoi
功 能: 把字符串转换成整型数.
名字来源:array to integer 的缩写.
原型: int atoi(const char *nptr);
函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
头文件: #include <stdlib.h>
程序例:
1)
2)
C语言库函数名:strchr
原型:extern char *strchr(const char *s,char c);
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
举例1:(在Visual C++ 6.0中运行通过)
举例2:
举例3:
C语言函数名:mmapmmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。
用法
参数
start:映射区的开始地址。
length:映射区的长度。
prot:期望的内存保护标志,不能与文件的打开模式冲突。是以下的某个值,可以通过or运算合理地组合在一起
PROT_EXEC //页内容可以被执行
PROT_READ //页内容可以被读取
PROT_WRITE //页可以被写入
PROT_NONE //页不可访问
flags:指定映射对象的类型,映射选项和映射页是否可以共享。它的值可以是一个或者多个以下位的组合体
MAP_FIXED //使用指定的映射起始地址,如果由start和len参数指定的内存区重叠于现存的映射空间,重叠部分将会被丢弃。如果指定的起始地址不可用,操作将会失败。并且起始地址必须落在页的边界上。
MAP_SHARED //与其它所有映射这个对象的进程共享映射空间。对共享区的写入,相当于输出到文件。直到msync()或者munmap()被调用,文件实际上不会被更新。
MAP_PRIVATE //建立一个写入时拷贝的私有映射。内存区域的写入不会影响到原文件。这个标志和以上标志是互斥的,只能使用其中一个。
MAP_DENYWRITE //这个标志被忽略。
MAP_EXECUTABLE //同上
MAP_NORESERVE //不要为这个映射保留交换空间。当交换空间被保留,对映射区修改的可能会得到保证。当交换空间不被保留,同时内存不足,对映射区的修改会引起段违例信号。
MAP_LOCKED //锁定映射区的页面,从而防止页面被交换出内存。
MAP_GROWSDOWN //用于堆栈,告诉内核VM系统,映射区可以向下扩展。
MAP_ANONYMOUS //匿名映射,映射区不与任何文件关联。
MAP_ANON //MAP_ANONYMOUS的别称,不再被使用。
MAP_FILE //兼容标志,被忽略。
MAP_32BIT //将映射区放在进程地址空间的低2GB,MAP_FIXED指定时会被忽略。当前这个标志只在x86-64平台上得到支持。
MAP_POPULATE //为文件映射通过预读的方式准备好页表。随后对映射区的访问不会被页违例阻塞。
MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。
fd:有效的文件描述词。如果MAP_ANONYMOUS被设定,为了兼容问题,其值应为-1。
offset:被映射对象内容的起点。
返回说明
成功执行时,mmap()返回被映射区的指针,munmap()返回0。失败时,mmap()返回MAP_FAILED[其值为(void *)-1],munmap返回-1。errno被设为以下的某个值
EACCES:访问出错
EAGAIN:文件已被锁定,或者太多的内存已被锁定
EBADF:fd不是有效的文件描述词
EINVAL:一个或者多个参数无效
ENFILE:已达到系统对打开文件的限制
ENODEV:指定文件所在的文件系统不支持内存映射
ENOMEM:内存不足,或者进程已超出最大内存映射数量
EPERM:权能不足,操作不允许
ETXTBSY:已写的方式打开文件,同时指定MAP_DENYWRITE标志
SIGSEGV:试着向只读区写入
SIGBUS:试着访问不属于进程的内存区
mmap设备操作
mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较在用户空间和内核空间互相拷贝数据,效率更高。在要求高性能的应用中比较常用。mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap,mmap的实现和硬件有关。
编辑本段其他
munmap执行相反的操作,删除特定地址区域的对象映射,基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的 st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引时会更新该字段的值。用 PROT_WRITE 和 MAP_SHARED标志建立起来的文件映射其st_ctime 和 st_mtime,在对映射区写入之后但在msync()通过MS_SYNC 和 MS_ASYNC两个标志调用之前会被更新
#define中的 #与##
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
C语言库函数名:MEMCPY
概述
memcpy()函数可用来拷贝任意类型的数据
函数原型
#include <string.h>
void *memcpy(void *destination, void *source, unsigned int count);
详细描述
由source所指内存区域复制count个字符串到destination所指内存区域.
* memcpy() 是用来做内存拷贝:
* 可以用来拷贝任何数据类型的对象,而不像strcpy()函数那样仅限于字型.
* 可以指定拷贝的数据长度.
* source和destination所指内存区域不能重叠.
* 如果不指定memcpy()函数要拷贝的字节数,函数将以null字符结束。因为并不是所有的数据都以null字符结束,所以最好为memcpy()函数指定要拷贝的字节数。
* 如果拷贝不成功,函数返回NULL指针。所以在调用该函数时应该检测返回值是否为NULL再执行相应的操作。
返回值
若拷贝成功,函数返回指向destination的指针。 若拷贝不成功,函数返回NULL指针。
用法示例fork()函数 Linux
#include<unistd.h>
#include<sys/types.h>
函数定义:
pid_t fork( void);
(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)
返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1
函数说明:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。
为什么fork会返回两次?
由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。
调用fork之后,代码有两份,都从fork函数中返回,箭头表示各自的执行处
示例代码:
分享到:
相关推荐
这是用单片机调试过的C语言程序!!!这是用单片机调试过的C语言程序!!!
本文实例讲述了基于C语言实现的aes256加密算法。分享给大家供大家参考,具体如下: aes256.h: #ifndef uint8_t #define uint8_t unsigned char #endif #ifdef __cplusplus extern C { #endif typedef struct { ...
Android Init Language是android系统很重要的组成 文件来自于\system\core\rootdir 里面有init.rc,init.usb.rc,init.zygote64.rc,init-debug.rc,ueventd.rc
1、ymodem发送代码(c语言),网上大多只有接收代码,有也是写得比较乱,此代码小巧便于移植到小系统。 2、优点:io可自定义,注释清晰,传输效率高,短小精炼。
float Init_Salary; //应发工资 float Water_Rate; //水费 float Electric_Rate; //电费 float tax; //税金 float Final_Salary; //实发工资 }SI[MAX]; //SI[MAX]中每个数组元素对应一个职工工资信息
C语言编写的图书管理系统,项目作业 #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<ctype.h> #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define ...
void inIt(); int getBoxNumber(char *number); void setBox(int i,int j,char *number); void disBox(int yX,int yY); void moveBox(int nX,int nY); int cheakBoxL(int l); int cheakBoxH(int h); int cheakBox();...
void Init_Fire(); // 初始化烟花 void Load_Image(); // 加载烟花图片 void Shoot(); // 发射烟花 void Chose(DWORD& t1); // 筛选烟花 void Show(DWORD* pMem); // 绽放烟花 ...
Linux init详解
//----------------- 栈的基本操作的算法实现 --------------------------------Status InitStack(SqStack &s)...{ s.base = (SElemType * ) malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!s.base) exit...
init是一个进程,确切的说,它是Linux系统中用户空间的第一个进程。由于Android是基于Linux内核的,所以init也是Android系统中用户空间的第一个进程。init的进程号是1。作为天字第一号进程,init有很多重要的工作: ...
函数原型: MYSQL *mysql_init(MYSQL *mysql) 函数返回值: 一个被始化的MYSQL*句柄 备注: 在内存不足的情况下,返回NULL 所需头文件: #include 函数功能: 关闭一个服务器连接,并释放与连接相关的内存 函数...
在项目中已经使用的,用C语言实现块队列。 1、queue_dt_init初始化块队列。 2、 queue_dt_in将数据放入队列。 3、queue_dt_out从队列取出数据。
9 static int init(void); // 初始化函数 10 static void destroy_all(void); //销毁全部链表 11 int main(void) 12 { 13 int ret; 14 printf("\033[?25l"); 15 ret = init(); 16 if(ret != 0) 17 { 18 ...
void initBoard() { for(int i = 0; i ; i++) { for(int j = 0; j ; j++) { board[i][j] = '+'; } } } void printBoard() { for(int i = 0; i ; i++) { for(int j = 0; j ; j++) { printf("%c ", board[i]...
本文档是基于Android8.1进行分析,对init进程的启动初始化工作进行了分析,包括解析init.rc配置文件,开启属性服务,开启socket监听子进程终止并处理,创建epoll_fd监听创建的其他fd,用来调用对应的处理函数;...
一起学习,一起进步。 “/etc/rc.d/init.d/目录下的脚本就类似与windows中的注册表,在系统启动的时候某些指定脚本将被执行”。开始之前,先引用李善明经理昨天晚上总结时的一个理解,让大家先对init.d目录有个大概...
void init(); //初始化函数 void draw(int a, int b, int color); //画棋子函数 a表示行b表示列 color表示颜色 void gameover(); //游戏结束 int judge(int a, int b, int c); //判断是否有连续五个蓝棋子,a表示行...
C语言实现单链表 Init(初始化) Length(当前结点个数) AddEnd(尾部添加) AddFirst(首部添加) Insert(插入) * Delete(删除) Find(查找返回) ShowAll(显示所有元素) Destory(销毁链表)