Linux 函数分析
_charles_
永不止步
展开
-
define用法-linux
1.简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME){.........}编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。2.define的“函数定义”define可以像函数那样接受一些参数例子1:#def原创 2013-09-30 09:55:54 · 5219 阅读 · 1 评论 -
snprintf函数 -- linux
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)#inc转载 2014-12-16 15:55:35 · 1228 阅读 · 0 评论 -
dup和dup2两个函数 -- linux函数
Unix/Linux中dup和dup2两个函数都用于复制一个现存的文件描述符。它们是实现“重定向”功能的关键函数,地位很重要。原型如下:#include int dup(int filedes);int dup2(int filedes, int filedes2);说明:1. dup 返回的新的文件描述符一定是当前可用的文件描述符中最小的数值。2. 用dup2转载 2015-03-05 16:22:23 · 817 阅读 · 0 评论 -
mmap函数和sysconf函数使用页偏移例子--linux函数
#include #include #include #include #include #include #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0)转载 2014-03-20 08:56:31 · 1780 阅读 · 0 评论 -
内存映射函数mmap函数详解-linux
一、概述 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间用户空间两者之间需要大量数据传输等操作的话效率是非常高的。以下是一个把普遍文件映射到用户空间的内存区域的示意图。图一:二、基本函数 mmap函转载 2014-03-19 10:13:55 · 1022 阅读 · 0 评论 -
strtol 函数-linux
今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。网上关于这个函数的资料大都来源于同份资料,linux库函数,讲的不够细致。于是,我花了几个小时,认真地尝试其功能,并整理了这篇文章,希望能对C语言的爱好者一些帮助。希望大家能够将本文中发现的错误及时反馈给我,以便修正。我的信箱是。+------转载 2014-01-23 13:41:19 · 1980 阅读 · 1 评论 -
stdin,stdout 和STDOUT_FILENO,STDIN_FILENO--linux
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别:stdin等是FILE *类型,属于标准I/O,在。STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2转载 2014-03-20 09:22:01 · 3327 阅读 · 0 评论 -
sscanf学习笔记(字符串的获取)
名称sscanf() - 从一个字符串中读取与指定格式相符的数据.函数原型:int sscanf( const char *, const char *, ...);int sscanf(const char *buffer,const char *format,[argument ]...);buffer存储的数据forma原创 2013-07-29 09:41:01 · 2352 阅读 · 0 评论 -
scanf易错点解析
(caichengyu 2013/5/20)一、回车也被获取了例: char a; while(1) { scanf("%c",&a); printf("getchar : %d\n", (int)a); }输入:1234结果:get char :原创 2013-06-09 10:42:47 · 2013 阅读 · 0 评论 -
mmap函数和write函数(多了一次拷贝)--inux函数
mmap函数的使用,与驱动中mmap函数的实现mmap怎样使用,怎样实现,为什么mmap可以减少额外的拷贝?下面简单介绍。一、mmap的使用*内存映射:#include void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int munma转载 2014-03-20 08:23:15 · 2868 阅读 · 0 评论 -
truncate函数和ftruncate修改文件大小-linux
相关函数:open, ftruncate 表头文件:#include 定义函数:int truncate(const char *path, off_t length); truncate("/aaa",500); 函数说明:truncate()会将参数path指定的文件大小改为参数length指定的大小。 如果原来的文件大小比参数length转载 2014-03-20 10:29:40 · 14659 阅读 · 0 评论 -
内存管理相关函数 -- Linux
1、kmalloc()/kfree()static __always_inline void *kmalloc(size_t size, gfp_t flags)内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。有关buddy和slab,请参见《转载 2015-07-22 11:52:37 · 1272 阅读 · 1 评论 -
fget函数读取一行数据,非二进制文件 -- linux
fget函数的原型如下:char *fgets(char *buf, int n, FILE *fp)功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。2.每次调用,fgets都会把缓冲区的最后一个字符转载 2015-07-24 09:54:22 · 3553 阅读 · 0 评论 -
chdir()改变当前工作目录 -- Linux
int chdir(const char *path );说明:chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限错误信息:EFAULT: path 指向了非法地址ENAMETOOLNG:路径过长ENOENT:文件不存在ENOMEM:内核内存不足ENOTDIR:给出路径不是目录EACCES:转载 2015-09-02 11:05:35 · 3974 阅读 · 0 评论 -
getdtablesize()函数
刚才在看daemon进程是=时,看到了getdtablesize()函数,额。。。。。。。没见过,不知道怎么用,,呼呼,在网上查了一下,原来,它是用来返回这个进程的文件描述表的项数,也就是说这个进程打开的文件的数目,就是这个意思。。。原创 2015-09-01 14:40:38 · 4820 阅读 · 0 评论 -
umask()函数 -- linux函数
相关函数:creat, open头文件:#include #include 定义函数:mode_t umask(mode_t mask);函数说明:umask()会将系统umask值设成参数mask&0777后的值, 然后将先前的umask值返回。在使用open()建立新文件时, 该参数mode 并非真正建立文件的权限, 而是(mode&~umask)的权限值。原创 2015-09-01 14:57:03 · 1504 阅读 · 0 评论 -
chown()改变文件所有者 -- Linux
chown函数:改变文件的所有者相关头文件:#include 函数表达式:int chown(const char *pathname,uid_t owner,gid_t group);参数说明: 参数pathname表示文件的路径。 参数owner表示新的所有者用户的ID。 参数group表示新的组ID。转载 2015-09-02 11:01:58 · 1722 阅读 · 0 评论 -
getuid()获取用户识别码 -- linux函数
相关函数:geteuid, setreuid, setuid头文件:#include #include 定义函数:uid_t getuid(void);函数说明:getuid()用来取得执行目前进程的用户识别码。返回值:用户识别码范例#include #include main(){ printf("uid is %d\n"转载 2015-09-01 17:42:41 · 13740 阅读 · 0 评论 -
strdup函数 -- linux
函数名: strdup功 能: 将串拷贝到新建的位置处用 法: char *strdup(char *str); 这个函数在linux的man手册里解释为:The strdup() function returns a pointer toa new string which is aduplicate of the string s. Memo转载 2014-12-16 16:05:03 · 1039 阅读 · 0 评论 -
strdup函数 -- linux函数
函数名: strdup功 能: 将串拷贝到新建的位置处用 法: char *strdup(char *str); 这个函数在linux的man手册里解释为:The strdup() function returns a pointer toa new string which is aduplicate of the string s. Memo转载 2014-11-14 11:21:58 · 1529 阅读 · 0 评论 -
c语言获取shell脚本输出 -- 管道方式
1. 前言Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个 ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令。但是,system函数仅返回命令是否执行成功,而我们可能转载 2014-09-19 17:56:17 · 2600 阅读 · 0 评论 -
strlen/string函数-linux
概念解析:1.sizeof是算符,strlen是函数。2.数组做sizeof的参数不退化,传递给strlen就退化为指针了。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。strlen:1.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。sizeof:原创 2013-09-29 16:44:26 · 2350 阅读 · 0 评论 -
va_start/va_end函数-linux
man: #include void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_list src);1:当无法列出传递函数的转载 2013-09-30 16:11:02 · 4472 阅读 · 0 评论 -
*p++/*++p区别-linux
#include <stdio.h>main(){ char * s = "123456"; char * p; p = s; printf( "%c\n", *p++ ); printf( "%c\n", *p++ ); p = s; printf( "%c\n", *++p ); printf( "%c\n", *++p );}结果:1223原创 2013-09-30 16:20:54 · 1959 阅读 · 0 评论 -
getline函数-linux
头文件:#include <stdio.h>函数:ssize_t getline(char **lineptr, size_t *n, FILE *stream);eg:ssize_t size;//存放 当前行 的长度(包括“\n”)char * line = NULL;//存放 当前行 的字符串size_t len;//文件总长度FILE *fp;size = getline( &line, &len, fp );[注意;最后需要判断 line 是否为空指针,如果不是需要释放原创 2013-09-02 14:09:47 · 5267 阅读 · 1 评论 -
mkdir函数-linux
mkdir函数头文件库:#include <sys/stat.h>#include <sys/types.h>函数原型:int mkdir(const char *pathname, mode_t mode);函数说明:mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。返回值:若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。mode方式:原创 2013-08-26 15:13:15 · 2089 阅读 · 1 评论 -
fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
fseek(移动文件流的读写位置)头文件#include<stdio.h>定义函数int fseek(FILE * stream,long offset,int whence);函数说明fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。参数 whence为下列其中一种:SEEK_SET--文件开头offset位移量 为 新的读写位置。SEEK_CUR--目前的读写位置往后增加offset个位移量。SE原创 2013-09-09 09:43:57 · 4496 阅读 · 0 评论 -
system/WIFEXITED/WEXITSTATUS函数-linux
system:感性认识:systerm两层含义:1、正确退出后。还需要再判断,操作成功或者操作失败。2、错误退出。#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> int main() { pid_t status; status = system("./test.sh"); if (-1 == st原创 2013-09-29 10:48:28 · 19873 阅读 · 1 评论 -
时间结构体/函数-linux
简介本文旨在为了解Linux各种时间类型与时间函数提供技术文档。1、Linux下常用时间类型Linux下常用时间类型有四种:time_t、struct tm、struct timeval、struct timespec1.1 time_t时间类型time_t类型在time.h中定义:[cpp] view plaincopyprint?原创 2013-09-29 15:29:57 · 2828 阅读 · 0 评论 -
access函数-linux
表头文件#include<unistd.h>定义函数int access(const char * pathname, int mode);函数说明检查是否可以读/写某一已存在的文件。pathname: 文件/目录路径mode:R_OK\W_OK\X_OK: 检查文件是否具有读取、写入和执行的权限F_OK: 判断该文件是否存在由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文原创 2013-08-26 15:10:47 · 2647 阅读 · 0 评论 -
getopt_long函数基本用法-linux
一、感性认识:[c-sharp] view plaincopy#include <stdio.h> #include <getopt.h> char * l_opt_arg; char * const short_options = "nbl:"; //单冒号表示是否带有参数[l带有参数后面加冒号] struct option long_options[] = { { "name", 0, NULL, 'n' }, { "bf_name原创 2013-08-06 13:34:06 · 1558 阅读 · 0 评论 -
malloc/free/calloc/realloc函数-linux
1. malloc函数malloc函数可以从堆上获得指定字节的内存空间,其函数声明如下:void * malloc(int n);其中,形参n为要求分配的字节数。如果函数执行成功,malloc返回获得内存空间的首地址;如果函数执行失败,那么返回值为NULL。由于malloc函数值的类型为void型指针,因此,可以将其值类型转换后赋给任意类型指针,这样就可以通过操作该类型指针转载 2013-11-27 11:42:48 · 1672 阅读 · 0 评论 -
设置connect超时-linux
在Linux平台下,可以通过在connect之前设置SO_SNDTIMO来达到控制连接超时的目的。简单的写了份测试代码:[cpp] view plaincopy#include #include #include #include #include #include #include转载 2013-12-11 08:01:18 · 1216 阅读 · 0 评论 -
同一个文件共同读写(open中O_SYNC用法)
现来看二个程序。#include#include#include#include#include#includeint main(){ int fd; if((fd=open("test",O_RDWR|)) { perror("open"); return -1; }转载 2014-03-18 13:14:13 · 2477 阅读 · 0 评论 -
sscanf函数
此文所有的实验都是基于下面的程序: char str[10]; for (int i = 0; i 执行完后str的值为 str = "!!!!!!!!!!" 我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的惊叹号,这样就可以方便的观察str发生了怎样的变化。下面我们做几个小实验,看看使用sscanf转载 2014-04-10 15:30:55 · 975 阅读 · 0 评论 -
execve 函数
execve(参数1,参数2,参数3)参数1:命令所在路径参数2:命令的集合参数3:传递给执行文件的环境变量集 [c-sharp] view plaincopy#include #include int main(int arg,char **args) { //char *转载 2014-05-22 10:55:10 · 1851 阅读 · 0 评论 -
linux中用C语言对环境变量设置
getenv(取得环境变量内容)相关函数putenv,setenv,unsetenv表头文件#include定义函数char * getenv(const char *name);函数说明getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回转载 2014-05-23 08:32:28 · 1537 阅读 · 0 评论 -
getopt()函数 -- Linux
在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如:./a.out -a1234 -b432 -c -d程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,结合switch语句来完成的,首先来看下面的代码:#include #include int main(int argc,ch转载 2015-09-01 17:57:22 · 477 阅读 · 0 评论