Linux下常用C语言字符串操作函数

合集下载

ubuntuLinux下C语言open函数打开或创建文件与read,write函数详细讲解

ubuntuLinux下C语言open函数打开或创建文件与read,write函数详细讲解

ubuntuLinux下C语⾔open函数打开或创建⽂件与read,write函数详细讲解open(打开⽂件)相关函数read,write,fcntl,close,link,stat,umask,unlink,fopen表头⽂件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>定义函数int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);函数说明参数pathname 指向欲打开的⽂件路径字符串。

下列是参数flags 所能使⽤的旗标:O_RDONLY 以只读⽅式打开⽂件O_WRONLY 以只写⽅式打开⽂件O_RDWR 以可读写⽅式打开⽂件。

上述三种旗标是互斥的,也就是不可同时使⽤,但可与下列的旗标利⽤OR(|)运算符组合。

O_CREAT 若欲打开的⽂件不存在则⾃动建⽴该⽂件。

O_EXCL 如果O_CREAT也被设置,此指令会去检查⽂件是否存在。

⽂件若不存在则建⽴该⽂件,否则将导致打开⽂件错误。

此外,若O_CREAT与O_EXCL同时设置,并且欲打开的⽂件为符号连接,则会打开⽂件失败。

O_NOCTTY 如果欲打开的⽂件为终端机设备时,则不会将该终端机当成进程控制终端机。

O_TRUNC 若⽂件存在并且以可写的⽅式打开时,此旗标会令⽂件长度清为0,⽽原来存于该⽂件的资料也会消失。

O_APPEND 当读写⽂件时会从⽂件尾开始移动,也就是所写⼊的数据会以附加的⽅式加⼊到⽂件后⾯。

O_NONBLOCK 以不可阻断的⽅式打开⽂件,也就是⽆论有⽆数据读取或等待,都会⽴即返回进程之中。

O_NDELAY 同O_NONBLOCK。

O_SYNC 以同步的⽅式打开⽂件。

O_NOFOLLOW 如果参数pathname 所指的⽂件为⼀符号连接,则会令打开⽂件失败。

由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和。。。

由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和。。。

由Linux中管道的buffer,浅谈C语⾔中char类型字符串拷贝使⽤strcpy()和。

今天在写⽗⼦进程⽤两个单向管道通信时,出现了错误:Segmentation fault (core dumped)打开core⽂件发现:附上源码:1 #include <stdlib.h>2 #include <unistd.h>3 #include <stdio.h>4 #include <sys/wait.h>5 #include <errno.h>6 #include <string.h>78void erreur(const char *msg)9 {10 perror(msg);11 }1213#define NBCAR 2561415int main(void)16 {17 pid_t pid;18int tube[2];19int tube2[2];20int ret_out, ret_in;21char *buffer,*buffer2;2223if (pipe(tube) == -1) {//from parent to son24 erreur("Erreur de creation du pipe");25 exit(EXIT_FAILURE);26 }27if (pipe(tube2) == -1) {//from son to parent28 erreur("Erreur de creation du pipe");29 exit(EXIT_FAILURE);30 }31 buffer = (char *) malloc(NBCAR * sizeof(char));32 buffer2 = (char *) malloc(NBCAR * sizeof(char));33switch (pid = fork()) {34case (pid_t) -1:35 erreur("fork");36case (pid_t) 0:37 close(tube[1]);38 close(tube2[0]);39if (printf("Je suis le fils de PID %d\n write dans le tube : %s\n Nbr Caracteres lus: %d\n",getpid(), buffer, ret_in =write(tube2[1], buffer="tube1 s to p", NBCAR - 1)) == -1) {40 erreur(" Pb Lecture ");41 exit(EXIT_FAILURE);42 }43if (printf("Je suis le fils de PID %d\n Lecture dans le tube : %s\n Nbr Caracteres lus: %d\n",getpid(), buffer2, ret_in =read(tube[0], buffer2, NBCAR - 1)) == -1) {44 erreur(" Pb Lecture ");45 exit(EXIT_FAILURE);46 }4748 exit(0);49break;50default:51 close(tube[0]);52 close(tube2[1]);53if (printf("Je suis le parent de PID %d\n Lecture dans le tube : %s\n Nbr Caracteres lus: %d\n",getpid(), buffer, ret_in =read(tube2[0], buffer, NBCAR - 1)) == -1) {54 erreur(" Pb Lecture ");55 exit(EXIT_FAILURE);}56if (printf("Je suis le parent de PID %d\n write dans le tube : %s\n Nbr Caracteres lus: %d\n",getpid(), buffer2, ret_in =write(tube[1], buffer2="tube2 p to s", NBCAR - 1)) == -1) {57 erreur(" Pb Lecture ");58 exit(EXIT_FAILURE);}5960 wait(NULL);61break;6263 }64free(buffer);65free(buffer2);66return EXIT_SUCCESS;67 }关于SIGSEGV错误SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:1.buffer overflow --- usually caused by a pointer reference out of range.2.stack overflow --- please keep in mind that the default stack size is 8192K.3.illegal file access --- file operations are forbidden on our judge system.后来通过邮件问⽼师,发现是buffer出现内存泄漏。

C语言~所有的字符串操作函数

C语言~所有的字符串操作函数
strcpy(string, str1); printf("%s\n", string); return 0; }
7.函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 用 法: int strcspn(char *str1, char *str2); 程序例: #i nclude <stdio.h> #i nclude <string.h> #i nclude <alloc.h> int main(void) { char *string1 = "1234567890"; char *string2 = "747DC8"; int length;
printf("buffer 2 is greater than buffer 1\n"); if (ptr < 0)
printf("buffer 2 is less than buffer 1\n"); if (ptr == 0)
printf("buffer 2 equals buffer 1\n"); return 0; }
printf("buffer 2 is less than buffer 1\n"); if (ptr == 0)
printf("buffer 2 equals buffer 1\n"); return 0; }
14.函数名: strncpy 功 能: 串拷贝 用 法: char *strncpy(char *destin, char *source, int maxlen); 程序例: #i nclude <stdio.h> #i nclude <string.h> int main(void) {

Linux下C语言编程:编写函数,删除字符串中的空格

Linux下C语言编程:编写函数,删除字符串中的空格

Linux下C语言编程:编写函数,删除字符串中的空格.
//一维字符串数组" h a sdf g "
//指针指着第一个元素,判断是否为零,为零则++,不为零则赋值给另一个指针
//再把两个指针都++操作
//最后需要把新的数组后加'\0'
#include<stdio.h>
void del_space (char *s1);
//定义,定义后面要加分号";"表示语句结束
int main(int argc,char*argv[])
{
char s[] = " h a sdf g " ;
puts(s);
//字符串输出
del_space(s);
//调用删除空格函数
puts(s);
//打印删除空格后的字符串
return 0;
}
void del_space (char *s1)
//实现部分,后面不加封号";"表示语句没有结束
{
char *s2;
//去空格后保存的位置
s2 = s1;
//赋初值
while (*s1) {
if (*s1 != ' ')
{
*s2 = *s1;
s1 ++;
s2 ++;
}
else
{
s1 ++;
}
}
*s2 = '\0'; //新字符串最后加'\0' }
结果:
>> h a sdf g
>>hasdfg。

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语⾔常⽤的库函数----⽂件操作在没有IDE的时候,记住⼀些常⽤的库函数的函数名、参数、基本⽤法及注意事项是很有必要的。

参照Linux_C_HS.chm的⽬录,我⼤致将常⽤的函数分为⼀下⼏类:1. 内存及字符串控制及操作2. 字符串转换3. 字符测试4. ⽂件操作5. 时间⽇期6. 常⽤数学函数7. ⽂件内容操作8. ⽂件权限控制9. 进程操作10. 线程操作11. Socket操作12. 信号处理13. 数据结构及算法这次主要总结的是上⾯⿊⾊部分,关于⽂件操作的函数。

系统调⽤归类** 函数名⽤法备注**1. int open(const char *pathname, int flags); open and possibly create a file or device flags 必须包含O_RDONLY, O_WRONLY, or O_RDWR中的任何⼀个**2. int open(const char *pathname, int flags, mode_t mode); UP mode只是在flags中包含O_CREAT时才有效**3. int fsync(int fd); synchronize a file's in-core state with storage device 写完数据close前必须先同步,以防意外**4. off_t lseek(int fd, off_t offset, int whence); 定位⽂件位置第三个参数可以为SEEK_SET SEEK_CUR SEEK_END**5. ssize_t read(int fildes, void *buf, size_t nbyte); UP ⽂件位置会随读取的字节数移动**6. ssize_t write(int fildes, const void *buf, size_t nbyte); UP UP**7. int close(int fd); UP UP**8. void *mmap(void *addr, size_t length, int prot, int flags, 内存映射先⽤fstat得到⽂件⼤⼩,然后使⽤该函数将⽂件内容映射到内存中,然后就可以int fd, off_t offset); 直接调⽤字符串函数操作。

C语言库函数使用大全

C语言库函数使用大全

C语言库函数使用大全C语言是一种面向过程的编程语言,它提供了大量的库函数来方便开发者进行各种操作。

在本篇文章中,我将介绍一些常用的C语言库函数,并说明它们的使用方法。

1.字符串处理函数:- strlen:用于计算字符串的长度。

- strcat:用于将两个字符串连接起来。

- strcpy:用于将一个字符串复制到另一个字符串中。

- strcmp:用于比较两个字符串是否相等。

2.数学函数:- abs:返回一个整数的绝对值。

- sqrt:返回一个数的平方根。

- pow:计算一个数的指定次幂。

- rand:生成一个随机数。

3.输入输出函数:- printf:用于打印输出。

- scanf:用于接受用户的输入。

- getchar:用于从输入流中读取一个字符。

- putchar:用于将一个字符输出到屏幕上。

4.内存管理函数:- malloc:用于在堆中分配指定大小的内存块。

- free:用于释放之前分配的内存。

- calloc:可以在堆中分配指定数量和大小的内存,并将每个字节初始化为0。

- realloc:用于调整之前分配的内存块的大小。

5.时间日期函数:6.文件操作函数:- fopen:用于打开一个文件。

- fclose:用于关闭一个文件。

- fgets:从文件中读取一行字符串。

- fputs:向文件中写入一行字符串。

7.数组处理函数:- memset:将一个数组的所有元素设置为指定的值。

- memcpy:将一个数组的内容复制到另一个数组中。

- memmove:将一个数组的内容移动到另一个数组中,处理重叠情况。

- qsort:用于对数组进行快速排序。

这只是C语言库函数的一小部分,还有很多其他函数可供使用。

在实际开发中,根据需求选择适合的函数,可以提高代码的效率和可读性。

总结:C语言库函数提供了丰富的功能,可以帮助开发者简化编程过程。

在使用库函数时,需要仔细阅读函数的说明文档,并根据需求选择适合的函数和参数。

通过充分利用库函数,可以提高代码的开发效率和质量。

C语言中常见功能函数

C语言中常见功能函数

C语言中常见功能函数在C语言中,有很多常见的功能函数,它们是为了方便程序员在开发过程中进行一些常见操作而设计的。

下面是其中一些常见的功能函数:1.字符串操作函数:- strlen:用于获取字符串的长度。

- strcpy:用于复制字符串。

- strcat:用于拼接两个字符串。

- strcmp:用于比较两个字符串。

- strchr:用于在字符串中查找指定字符。

- strstr:用于在字符串中查找指定子字符串。

2.内存操作函数:- malloc:用于动态分配内存。

- free:用于释放动态分配的内存。

- memcpy:用于内存拷贝。

- memset:用于内存初始化。

3.文件操作函数:- fopen:用于打开文件。

- fclose:用于关闭文件。

- fgets:用于从文件中读取一行数据。

- fputs:用于向文件中写入一行数据。

- feof:用于判断是否到达文件末尾。

4.数学函数:- abs:用于计算绝对值。

- sin、cos、tan:用于计算三角函数值。

- sqrt:用于计算平方根。

- pow:用于计算幂运算。

5.随机数函数:- srand:用于设置随机数种子。

- rand:用于生成随机数。

6.时间函数:7.输入输出函数:- printf:用于向标准输出设备打印输出。

- scanf:用于从标准输入设备读取输入。

8.排序和查找函数:- qsort:用于对数组进行快速排序。

- bsearch:用于在有序数组中进行二分查找。

9.环境变量函数:- getenv:用于获取环境变量的值。

- setenv:用于设置环境变量的值。

10.字符处理函数:- isdigit:用于判断字符是否是数字。

- isalpha:用于判断字符是否是字母。

- isspace:用于判断字符是否是空白字符。

以上只是C语言中常见的一些功能函数,实际上C语言库中还有很多其他功能函数,可以根据需求选择合适的函数来完成相应的操作。

无论是字符串操作、内存操作、文件操作、数学运算,还是随机数生成、时间处理、输入输出以及排序和查找等,C语言提供了丰富的函数库来支持这些常见的功能需求。

LinuxC函数库大全

LinuxC函数库大全

LinuxC函数库⼤全(1)字符测试函数isalnum(测试字符是否为英⽂字母或数字)isalpha(测试字符是否为英⽂字母)isascii(测试字符是否为ASCII码字符)isblank(测试字符是否为空格字符)iscntrl(测试字符是否为ASCII码的控制字符)isdigit(测试字符是否为阿拉伯数字)isgraph(测试字符是否为可打印字符)islower(测试字符是否为⼩写英⽂字母)isprint(测试字符是否为可打印字符)isspace(测试字符是否为空格字符)ispunct(测试字符是否为标点符号或特殊符号)isupper(测试字符是否为⼤写英⽂字母)isxdigit(测试字符是否为16进制数字)(2)数据转换函数atof(将字符串转换成浮点型数)1atoi(将字符串转换成整型数)atol(将字符串转换成长整型数)ecvt(将浮点型数转换成字符串,19取四舍五⼊)fcvt(将浮点型数转换为字符串,20取四舍五⼊)gcvt(将浮点型数转换为字符串,21取四舍五⼊)(3)内存配置函数alloca(配置内存空间)brk(改变数据字节的范围)calloc(配置内存空间)free(释放原先配置的内存)getpagesize(取得内存分页⼤⼩)malloc(配置内存空间)mmap(建⽴内存映射)munmap(解除内存映射)realloc(更改⼰配置的内存空间)sbrk(增加程序可⽤的数据空间)(4)时间函数asctime(将时间和⽇期以字符串格式表⽰)clock(取得进程占⽤CPU的⼤约时间)ctime(将时间和⽇期以字符串格式表⽰)difftime(计算时间差距)ftime(取得⽬前的时间和⽇期)gettimeofday(取得⽬前的时间)gmtime(取得⽬前的时间和⽇期)localtime(取得当地⽬前的时间和⽇期)mktime(将时间结构数据转换成经过的秒数)settimeofday(设置⽬前的时间)strftime(格式化⽇期和时间)time(取得⽬前的时间)tzset(设置时区以供时间转换)(5)字符串处理函数bcmp(⽐较内存内容)bcopy(拷贝内存内容)bzero(将⼀段内存内容全清为零)ffs(在⼀整型数中查找第⼀个值为真的位)memchr(在某⼀内存范围中查找⼀特定字符) memcmp(⽐较内存内容)memcpy(拷贝内存内容)memfrob(对内存区域编码)memmove(拷贝内存内容)memset(将⼀段内存空间填⼊某值)rindex(查找字符串中最后⼀个出现的指定字符) strcasecmp(忽略⼤⼩写⽐较字符串)strcat(连接两字符串)strchr(查找字符串中第⼀个出现的指定字符)strcmp(⽐较字符串)strcoll(采⽤⽬前区域的字符排列次序来⽐较字符串) strcpy(拷贝字符串)strcspn(返回字符串中连续不含指定字符串内容的字符数) strdup(复制字符串)strfry(随机重组字符串内的字符)strlen(返回字符串长度)strncasecmp(忽略⼤⼩写⽐较字符串)strncat(连接两字符串)strncmp(⽐较字符串)strncpy(拷贝字符串)strpbrk(查找字符串中第⼀个出现的指定字符)strrchr(查找字符串中最后⼀个出现的指定字符)strspn(返回字符串中连续不合指定字符串内容的字符数) strstr(在⼀字符串中查找指定的字符串)strtok(分割字符串)(6)数学计算函数abs(计算整型数的绝对值)acos(取反余弦函数值)asin(取反正弦函数值)atan(取反正切函数值)atan2(取得反正切函数值)ceil(取不⼩于参数的最⼩整型数)cos(取余弦函数值)cosh(取双曲线余弦函数值)div(取得两整型数相除后的商及余数)exp(计算指数)fabs(计算浮点型数的绝对值)frexp(将浮点型数分为底数与指数)hypot(计算直⾓三⾓形斜边长)labs(计算长整型数的绝对值)ldexp(计算2的次⽅值)ldiv(取得两长整数相除后的商及余数)log(计算以e为底的对数值)log10(计算以10为底的对数值)modf(将浮点型数分解成整数与⼩数)pow(计算次⽅值)sin(取正弦函数值)sinh(取双曲线正弦函数值)sqrt(计算平⽅根值)tan(取正切函数值)tanh(取双曲线正切函数值)(7)⽤户和组函数cuserid(取得⽤户帐号名称)endgrent(关闭组⽂件)endpwent(关闭密码⽂件)fgetgrent(从指定的⽂件来读取组格式) fgetpwent(从指定的⽂件来读取密码格式) getegid(取得有效的组识别码)geteuid(取得有效的⽤户识别码)getgid(取得真实的组识别码)getgrent(从组⽂件⽂件中取得帐号的数据) getgrgid(从组⽂件中取得指定gid的数据) getgrnan(从组⽂件中取得指定组的数据) getgroups(取得组代码)getlogin(取得登录的⽤户帐号名称)getpw(取得指定⽤户的密码⽂件数据) getpwent(从密码⽂件中取得帐号的数据) getpwnam(从密码⽂件中取得指定帐号的数据) getpwuid(从密码⽂件中取得指定uid的数据) getuid(取得真实的⽤户识别码)getutent(从utmp⽂件中取得帐号登录数据) getutid(从utmp⽂件中查找特定的记录) getutline(从utmp⽂件中查找特定的记录) initgroups(初始化组清单)logwtmp(将⼀登录数据记录到wtmp⽂件) pututline(将utmp记录写⼊⽂件)setegid(设置有效的组识别码)seteuid(设置有效的⽤户识别码)setfsgid(设置⽂件系统的组识别码)setfsuid(设置⽂件系统的⽤户识别码)setgid(设置真实的组识别码)setgrent(从头读取组⽂件中的组数据) setgroups(设置组代码)setpwent(从头读取密码⽂件中的帐号数据) setregid(设置真实及有效的组识别码) setreuid(设置真实及有效的⽤户识别码) setuid(设置真实的⽤户识别码)setutent(从头读取utmp/⽂件中的登录数据) updwtmp(将⼀登录数据记录到wtmp⽂件) utmpname(设置utmp⽂件路径)(8)数据加密函数crypt(将密码或数据编码)getpass(取得⼀密码输⼊)(9)数据结构函数bsearch(⼆元搜索)hcreate(建⽴哈希表)hdestory(删除哈希表)hsearch(哈希表搜索)insque(加⼊⼀项⽬⾄队列中)lfind(线性搜索)lsearch(线性搜索)qsort(利⽤快速排序法排列数组)rremque(从队列中删除⼀项⽬)tdelete(从⼆叉树中删除数据)tfind(搜索⼆叉树)tsearch(⼆叉树)twalk(⾛访⼆叉树)(10)随机数函数drand48(产⽣⼀个正的浮点型随机数)erand48(产⽣⼀个正的浮点型随机数)jrand48(产⽣⼀个长整型数随机数)lcong48(设置48位运算的随机数种⼦) lrand48(产⽣⼀个正的长整型随机数) mrand48(产⽣⼀个长整型随机数)nrand48(产⽣⼀个正的长整型随机数) rand(产⽣随机数)random(产⽣随机数)seed48(设置48位运算的随机数种⼦) setstate(建⽴随机数状态数组)srand(设置随机数种⼦)srand48(设置48位运算的随机数种⼦) srandom(设置随机数种⼦)(11)初级I/O函数close(关闭⽂件)creat(建⽴⽂件)dup(复制⽂件描述词)dup2(复制⽂件描述词)fcntl(⽂件描述词操作)flock(锁定⽂件或解除锁定)fsync(将缓冲区数据写回磁盘)lseek(移动⽂件的读写位置)mkstemp(建⽴唯⼀的临时⽂件)open(打开⽂件)read(由⼰打开的⽂件读取数据)sync(将缓冲区数据写回磁盘)write(将数据写⼊已打开的⽂件内) (12)标准I/O函数clearerr(清除⽂件流的错误旗标)fclose(关闭⽂件)fdopen(将⽂件描述词转为⽂件指针)feof(检查⽂件流是否读到了⽂件尾) fflush(更新缓冲区)fgetc(由⽂件中读取⼀个字符)fgetpos(取得⽂件流的读取位置)fgets(由⽂件中读取⼀字符串)fileno(返回⽂件流所使⽤的⽂件描述词) fopen(打开⽂件)fputc(将⼀指定字符写⼊⽂件流中)fputs(将⼀指定的字符串写⼊⽂件内) fread(从⽂件流读取数据)freopen(打开⽂件)fseek(移动⽂件流的读写位置)fsetpos(移动⽂件流的读写位置)ftell(取得⽂件流的读取位置)fwrite(将数据写⾄⽂件流)getc(由⽂件中读取⼀个字符)getchar(由标准输⼊设备内读进⼀字符) gets(由标准输⼊设备内读进⼀字符串) mktemp(产⽣唯⼀的临时⽂件⽂件名) putc(将⼀指定字符写⼊⽂件中)putchar(将指定的字符写到标准输出设备) puts(将指定的字符串写到标准输出设备) rewind(重设⽂件流的读写位置为⽂件开头) setbuf(设置⽂件流的缓冲区)setbuffer(设置⽂件流的缓冲区) setlinebuf(设置⽂件流为线性缓冲区)tmpfile(建⽴临时⽂件)ungetc(将⼀指定字符写回⽂件流中)(13)进程及流程控制abort(以异常⽅式结束进程)assert(若测试的条件不成⽴则终⽌进程)atexit(设置程序正常结束前调⽤的函数)execl(执⾏⽂件)execle(执⾏⽂件)execlp(从PATH环境变量中查找⽂件并执⾏) execv(执⾏⽂件)execve(执⾏⽂件)execvp(执⾏⽂件)exit(正常结束进程)_exit(结束进程执⾏)fork(建⽴⼀个新的进程)getpgid(取得进程组识别码)getpgrp(取得进程组识别码)getpid(取得进程识别码)getppid(取得⽗进程的进程识别码)getpriority(取得程序进程执⾏优先权)longjmp(跳转到原先setjmp保存的堆栈环境) nice(改变进程优先顺序)on_exit(设置程序正常结束前调⽤的函数) ptrace(进程追踪)setjmp(保存⽬前堆栈环境)setpgid(设置进程组识别码)setpgrp(设置进程组识别码)setpriority(设置程序进程执⾏优先权) siglongjmp(跳转到原先sigsetjmp保存的堆栈环境) sigsetjmp(保存⽬前堆栈环境)system(执⾏shell命令)wait(等待⼦进程中断或结束)waitpid(等待⼦进程中断或结束)(14)格式化输⼈输出函数fprintf(格式化输出数据⾄⽂件)fscanf(格式化字符串输⼊)printf(格式化输出数据)scanf(格式化字符串输⼊)snprintf(格式化字符串复制)sprintf(格式化字符串复制)sscanf(格式化字符串输⼊)vfprintf(格式化输出数据⾄⽂件)vfcanf(格式化字符串输⼊)vprintf(格式化输出数据)vscanf(格式化字符串输⼊)vsnprintf(格式化字符串复制)vsprintf(格式化字符串复制)vsscanf(格式化字符串输⼊)(15)⽂件及⽬录函数access(判断是否具有存取⽂件的权限) alphasort(依字母顺序排序⽬录结构)chdir(改变当前的⼯作⽬录)chmod(改变⽂件的权限)chown(改变⽂件的所有者)chroot(改变根⽬录)fchdir(改变当前的⼯作⽬录)fchmod(改变⽂件的权限)fchown(改变⽂件的所有者)fstat(由⽂件描述词取得⽂件状态)ftruncate(改变⽂件⼤⼩)ftw(遍历⽬录树)get_current_dir_name(取得当前的⼯作⽬录) getcwd(取得当前的⼯作⽬录)getwd(取得当前的⼯作⽬录)lchown(改变⽂件的所有者)link(建⽴⽂件连接)lstat(由⽂件描述词取得⽂件状态)nftw(遍历⽬录树)opendir(打开⽬录)readdir(读取⽬录)readlink(取得符号连接所指的⽂件)realpath(将相对⽬录路径转换成绝对路径) remove(删除⽂件)rename(更改⽂件名称或位置)rewinddir(重设读取⽬录的位置为开头位置) scandir(读取特定的⽬录数据)seekdir(设置下回读取⽬录的位置)stat(取得⽂件状态)symlink(建⽴⽂件符号连接)telldir(取得⽬录流的读取位置)truncate(改变⽂件⼤⼩)umask(设置建⽴新⽂件时的权限遮罩)unlink(删除⽂件)utime(修改⽂件的存取时间和更改时间)utimes(修改⽂件的存取时间和更改时间)(16)信号函数alarm(设置信号传送闹钟)kill(传送信号给指定的进程)pause(让进程暂停直到信号出现)psignal(列出信号描述和指定字符串)raise(传送信号给⽬前的进程)sigaction(查询或设置信号处理⽅式)sigaddset(增加⼀个信号⾄信号集)sigdelset(从信号集⾥删除⼀个信号) sigemptyset(初始化信号集)sigfillset(将所有信号加⼊⾄信号集) sigismember(测试某个信号是否已加⼊⾄信号集⾥) signal(设置信号处理⽅式)sigpause(暂停直到信号到来)sigpending(查询被搁置的信号)sigprocmask(查询或设置信号遮罩)sigsuspend(暂停直到信号到来)sleep(让进程暂停执⾏⼀段时间)isdigit(测试字符是否为阿拉伯数字)(17)错误处理函数ferror(检查⽂件流是否有错误发⽣)perror(打印出错误原因信息字符串)streror(返回错误原因的描述字符串)(18)管道相关函数mkfifo(建⽴具名管道)popen(建⽴管道I/O)(19)Soket相关函数accept(接受socket连线)bind(对socket定位)connect(建⽴socket连线)endprotoent(结束⽹络协议数据的读取) endservent(结束⽹络服务数据的读取) gethostbyaddr(由IP地址取得⽹络数据) gethostbyname(由主机名称取得⽹络数据) getprotobyname(由⽹络协议名称取得协议数据) getprotobynumber(由⽹络协议编号取得协议数据) getprotoent(取得⽹络协议数据) getservbyname(依名称取得⽹络服务的数据) getservbyport(依port号码取得⽹络服务的数据) getservent(取得主机⽹络服务的数据) getsockopt(取得socket状态)herror(打印出⽹络错误原因信息字符串) hstrerror(返回⽹络错误原因的描述字符串)htonl(将32位主机字符顺序转换成⽹络字符顺序) htons(将16位主机字符顺序转换成⽹络字符顺序) inet_addr(将⽹络地址转成⽹络⼆进制的数字) inet_aton(将⽹络地址转成⽹络⼆进制的数字) inet_ntoa(将⽹络⼆进制的数字转换成⽹络地址) listen(等待连接)ntohl(将32位⽹络字符顺序转换成主机字符顺序) ntohs(将16位⽹络字符顺序转换成主机字符顺序) recv(经socket接收数据)recvfrom(经socket接收数据)recvmsg(经socket接收数据)send(经socket传送数据)sendmsg(经socket传送数据)sendto(经socket传送数据)setprotoent(打开⽹络协议的数据⽂件) setservent(打开主机⽹络服务的数据⽂件) setsockopt(设置socket状态)shutdown(终⽌socket通信)socket(建⽴⼀个socket通信)(20)进程通信(IPC)函数ftok(将⽂件路径和计划代号转为SystemcVIPCkey) msgctl(控制信息队列的运作)msgget(建⽴信息队列)msgrcv(从信息队列读取信息)msgsnd(将信息送⼊信息队列)semctl(控制信号队列的操作)semget(配置信号队列)semop(信号处理)shmat(attach共享内存)shmctl(控制共享内存的操作)shmdt(detach共享内存)shmget(配置共享内存)(21)记录函数closelog(关闭信息记录)openlog(准备做信息记录)syslog(将信息记录⾄系统⽇志⽂件)getenv(取得环境变量内容)putenv(改变或增加环境变量)setenv(改变或增加环境变量) unsetenv(清除环境变量内容)(23)正则表达式regcomp(编译正则表达式字符串) regerror(取得正则搜索的错误原因) regexec(进⾏正则表达式的搜索) regfree(释放正则表达式使⽤的内存) (24)动态函数dlclose(关闭动态函数库⽂件)dlerror(动态函数错误处理)dlopen(打开动态函数库⽂件)dlsym(从共享对象中搜索动态函数) (25)其他函数getopt(分析命令⾏参数)isatty(判断⽂件描述词是否是为终端机) select(I/O多⼯机制)ttyname(返回⼀终端机名称)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下常用C语言字符串操作函数stroul,strdupsnprintf()atioC中常用字符串操作函数#include <string.h>size_t strlen(const char *s) 测量字符串长度s的实际长度。

例如s[20]="abc",那么strlen(s)的结果是3,而不是20.这就是实际长度char *strcat(const char *s1, const *s2) 将字符串s2连接到s1的尾部。

从s1的\0开始。

int strcmp(const *s1,const *s2) 比较s1和s2。

s1 = s2的时候返回值=0s1 < s2的时候返回至<0s1 > s2的时候返回值>0char *strchr(const char *s, char c); 返回s中首次出现C的位置的指针。

如果s中不存在c则返回NULLchar *strrchr(const char *s, char c );返回s中最后一次出现c的位置的指针。

如果没有,则返回0char *strstr(const char *haystack, const char *needle);返回haystack中needle字符串首次出现的位置的指针(不比较结束符NULL)。

若果没找到则返回NULL限定长度的比较,拷贝和追加函数int strncmp(char *s1, const char *s2, size_t n);(这些都是针对字符串的前n个字符来操作的)char *strncpy(char *dest, const char *src, size_t n);char *strncat(char *dest, const char *src, size_t n);char *strdup(char *s)返回指向被复制的字符串的指针,所需空间由malloc()分配而且需要free释放空间int atoi(const char *nptr);将字符串转换成整型数atoi()会扫描参数nptr字符串,跳过前面的空格,直到遇上数字或者正负号才开始装换,而再遇到非数字或者非字符串结束时('\0')其实ato是一族将字符转换为数的函数,atof,atol:他们分别是将字符串转换成浮点型,长整型数。

unsigned long int stroul(const char *nptr, char **endptr, int base);stroul() 会根据base所指定的进制(10代表进制,18代表16进制)将字符串nptr转换成无符号的长整形数,base的范围是2~36,或者是0.当base的值为0时则是采用10进制做转换,当遇到'0x'开头的字符则会使用16进制做转换。

一开始stroul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或者正负号才开始转换,在遇到非数字或者字符串结束'\0'时结束转换,并将结果返回。

若参数endptr不为NULL,则会将遇到不合条件而终止的nptr的字符串指针由endptr返回。

stroul()返回转换后的长整形,否则返回ERANGE并将错误代码存入errno中。

ERANGE指定的转换字符串超出合法返回。

int snprintf(char *restrict buf, size_t n, const char *restrict format,...)snprintf()最多从源串format中拷贝n-1个字符到目标串buf中,然后再在后面加一个'\0'.如果目标串的大小为n的话,将不会溢出。

snprintf()如果成功则返回存入数组的字符数,若错误则返回负值。

例程:运行结果str = linuint sprintf(char *buf, char *format,arg_list);sprintf(str,"%s%s%s",s1,s2,s3);sprintf() 是一个功能强大的函数。

跟printf(char *format,arg_list)的功能类似。

不过,printf()是将格式化的字符输出到屏幕,而sprintf()则是将格式化的字符放入到buf中。

这个函数对操作缓冲区buf,并对其内容加以格式带来了极大的方便。

例如:输出结果为:Hello:linux is powerfultips:strlen()和strcat()是两个比较耗时的操作。

在程序中应该少使用。

在自己编写函数是遇到char型的定义中,如果这个char 参数在传入后不会被修改,应该在前面加const例如a(const char *s);s字符串在传入后内容不会被修改。

则前面要加const.关于const char *p和char const *p的关系可以根据读音来区分。

const char *pp is point to const char ;char const *pp is a const point to char;#include <stdio.h> int rename( const char *oldfname, const char *newfname ); 用于更改文件名sscanf() - 从一个字符串中读进与指定格式相符的数据.函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。

其中的format可以是一个或多个{%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}1. 常见用法。

char buf[512] = ;sscanf("123456 ", "%s", buf);printf("%s\n", buf);结果为:1234562. 取指定长度的字符串。

如在下例中,取最大长度为4字节的字符串。

sscanf("123456 ", "%4s", buf);printf("%s\n", buf);结果为:12343. 取到指定字符为止的字符串。

如在下例中,取遇到空格为止字符串。

sscanf("123456 abcdedf", "%[^ ]", buf);printf("%s\n", buf);结果为:1234564. 取仅包含指定字符集的字符串。

如在下例中,取仅包含1到9和小写字母的字符串。

sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);printf("%s\n", buf);结果为:123456abcdedf5. 取到指定字符集为止的字符串。

如在下例中,取遇到大写字母为止的字符串。

sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);printf("%s\n", buf);结果为:123456abcdedf6、给定一个字符串iios/12DDWDFF@122,获取/ 和@ 之间的字符串,先将"iios/"过滤掉,再将非'@'的一串内容送到buf中sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);printf("%s\n", buf);结果为:12DDWDFF7、给定一个字符串““hello, world”,仅保留world。

(注意:“,”之后有一空格)sscanf(“hello, world”, "%*s%s", buf);printf("%s\n", buf);结果为:world%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了如果没有空格则结果为NULL。

sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.//-------------------------------------------------------sscanf,表示从字符串中格式化输入上面表示从str中,输入数字给x,就是32700久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。

sscanf是一个运行时函数,原形很简单:int sscanf(const char *buffer,const char *format [,argument ] ...);它强大的功能体现在对format的支持上。

我以前用它来分隔类似这样的字符串2006:03:18:int a, b, c;sscanf("2006:03:18", "%d:%d:%d", a, b, c);以及2006:03:18 - 2006:04:18:char sztime1[16] = "", sztime2[16] = "";sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);但是后来,我需要处理2006:03:18-2006:04:18仅仅是取消了…-‟两边的空格,却打破了%s对字符串的界定。

我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。

我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。

format-type中有%[]这样的type field。

相关文档
最新文档