简单的可以自己写,就是字符串比对
完善点的,可以参考Linux,diffutil里面的diff命令的源码,绝对够完善,很多Linux比较工具都是基于它完成的
❷ C语言中,怎么用EOF结束输入
windows:
首先在最后一行结束后(此时未换行)输入ENTER键,新起一行,再输入ctrl+z,再输入时ENTER键即可。
Linux:
直接按CTRL+D快捷键
示例:
#include<iostream>
using namespce std;
void main()
{
int a;
while(cin >>a)
{
;//循环输入的代码块
}
}
C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。
如果遇到文件结束,函数feof(fp)的值为1,否则为0.feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。
例如:编写程序,用于把一个文本文件(源文件)复制到另一个文件(目的文件)中。源文件名为file_a.dat,目的文件名为file_b.dat。程序如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void file(FILE *,FILE *);
main ( )
{
FILE*fpin,*fpout;
fpin =fopen ("file_a.dat","r"); /*打开输入文件*/
fpout = fopen ("file_b.dat","w"); /*打开输出文件*/
file( fpin,fpout ); /*把fpin所指文件中的内容输出到fpout所指文件中*/
fclose ( fpin );fclose ( fpout ); /*关闭输入输出文件*/
}
void file( FILE *fpin, FILE *fpout )
{
char ch;
ch = getc ( fpin ); /*先读一次文件再去判文件是否结束*/
while ( !feof( fpin ) ) /*当未到文件末尾是进行循环*/
{
putc ( ch, fpout ); ch= getc ( fpin );} /*逐个字符进行复制*/
}
❸ linux下调用popen执行命令,然后调用fgets读取命令输出,大部分命令可以执行,执行某条命令时fgets挂住
起码你的代码有一个漏洞:第一次进入while时,!feof(pipe)是在判断谁?说明你对feof()这个函数并没有掌握,它必须在逻辑上“紧跟”在读文件动作之后才能正确生效,这第一次是“紧跟”在哪个读动作之后?到了文件结尾处就更可笑了:经while(!feof(pipe))判断文件还没有结束,比如说文件中还剩一个最后的'\n',可是体中的if(fread(&c,1,1,pipe)==1)中的fread函数还能读到什么?细节我就不说了,太长。建议把
while(!feof(pipe)){
if(fread(&c,1,1,pipe)==1){
result[i++]=c;
if(c==0)
break;
}
}
这一段改成
while(fread(&c,1,1,pipe),!feof(pipe)){
result[i++]=c;
//if(c==0)//这两句考虑一下吧,文件中有0吗?不可能有0,所以逻辑就有问题,建议删除
//break;
}
一试。
❹ fread()函数如何判断是否到文件末尾
fread(从文件流读取数据)
相关函数 fopen,fwrite,fseek,fscanf
表头文件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fread()用来从文件流中读取数据。
参数stream为已打开的文件指针,
参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。
Fread()会返回 实际 读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。
返回值 返回实际读取到的nmemb数目。
附加说明
范例 #include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size);
}
执行 name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11
========================
feof(检查文件流是否读到了文件尾)
相关函数 fopen,fgetc,fgets,fread
表头文件 #include<stdio.h>
定义函数 int feof(FILE * stream);
函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。
返回值 返回非零值代表已到达文件尾。
❺ Linux C函数实例速查手册的目录
第1章 初级I/O函数
1.1 close函数:关闭已经打开的文件
1.2 creat函数:创建一个文件
1.3 p函数:复制文件描述符
1.4 p2函数:复制文件描述符到指定的位置
1.5 fcntl函数:改变文件的状态
1.6 fsync函数:将缓冲区数据回写到磁盘文件
1.7 Lseek函数:移动文件的读写位置
1.8 open函数:打开一个文件
1.9 read函数:读取文件的数据
1.10 sync函数:将所有打开的文件写回磁盘
1.11 write函数:输出内容到文件
第2章 文件管理操作函数
2.1 access函数:判断进程是否具有访问文件的权限
2.2 alphasort函数:按照字母顺序排序目录结构
2.3 chdir函数:改变当前的工作目录
2.4 chmod函数:改变文件的权限
2.5 chown函数:改变文件的所有者
2.6 chroot函数:改变进程的根目录
2.7 closedir函数:关闭目录文件
2.8 fchdir函数:使用文件描述符改变当前的工作目录
2.9 fchmod函数:改变一个已经打开的文件的权限
2.10 fstat函数:得到一个打开文件的状态
2.11 truncate函数:改变一个打开文件的大小
2.12 ftw函数:遍历目录树
2.13 get_current_dir_name函数:取得当前的工作目录
2.14 getcwd函数:取得进程的当前工作目录
2.15 lchown函数:改变符号链接文件的拥有者
2.16 link函数:建立一个硬链接
2.17 lstat函数:得到符号链接的文件状态
2.18 nftw函数:遍历目录树
2.19 opendir函数:打开目录文件
2.20 readdir函数:读取目录文件的内容
2.21 readlink函数:读取符号链接文件本身的内容
2.22 realpath函数:将相对目录路径转换成绝对路径
2.23 remove函数:删除文件或者目录
2.24 rename函数:更改文件的名称或位置
2.25 rewinddir函数:回卷目录文件
2.26 seekdir函数:文件定位函数
2.27 stat函数:取得文件状态
2.28 symlink函数:创建一个符号链接
2.29 telldir函数:取得目录文件的读取位置
2.30 truncate函数:改变文件大小
2.31 umask:设置创建文件时使用的权限掩码
2.32 unlink函数:删除文件的一个硬链接
第3章 标准I/O函数
3.1 clearerr函数:清除错误标志
3.2 fclose函数:关闭流文件描述符
3.3 fdopen函数:转换文件描述符到文件指针
3.4 feof函数:文件结束判断函数
3.5 fflush函数:刷新流文件读写缓存
3.6 fgetc函数:从流文件中读取一个字符
3.7 fgetpos函数:返回流文件当前读写位置
3.8 fgets函数:从流文件中读出一行数据
3.9 fileno函数:获得流文件的文件描述符
3.10 fopen函数:打开文件
3.11 fputc函数:将字符写入流文件
3.12 fputs函数:将字符串写入流文件
3.13 fread函数:从流文件中读出数据
3.14 freopen函数:打开文件
3.15 fseek函数:移动流文件的读写位置
3.16 fsetpos函数:设置流文件当前读写位置
3.17 ftell函数:得到流文件的读取位置
3.18 fwrite函数:向流文件中写入数据
3.19 getc函数:从文件中读出一个字符
3.20 getchar函数:从标准输入中读入一个字符
3.21 gets函数:从标准输入中读入一行数据
3.22 mktemp函数:产生临时文件的文件名
3.23 putc函数:将字符写入文件
3.24 putchar函数:将字符输出到标准输出中
3.25 puts函数:将字符串输出在标准输出中
3.26 rewind函数:将流文件的读写位置移动到文件的起始位置
3.27 setbuf函数:设置文件缓冲区
3.28 setbuffer函数:设置文件缓冲区
3.29 setlinebuf函数:设置行缓冲模式
3.30 setvbuf函数:设置自定义文件缓冲区
3.31 tmpfile函数:建立临时的二进制文件
3.32 ungetc函数:将字符写回文件
第4章 格式化输入输出函数
4.1 fprintf函数:格式化输出到文件
4.2 fscanf函数:格式化从文件中读出数据
4.3 printf函数:格式化输出
4.4 scanf函数:格式化输入
4.5 snprintf函数:格式化字符输入
4.6 sprintf函数:格式化字符串打印
4.7 sscanf函数:格式化字符串取值
4.8 vfprintf函数:可变参数输出函数
4.9 vfscanf函数:格式化输入
4.10 vprintf函数:格式化输出函数
4.11 vscanf函数:格式化输入函数
4.12 vsnprintf函数:格式化字符串复制
4.13 vsprintf函数:格式化字符串复制
4.14 vsscanf函数:格式化字符输入
第5章 进程控制
5.1 abort函数:进程异常终止函数
5.2 atexit函数:进程终止处理函数
5.3 execl函数:执行文件函数
5.4 execle函数:执行文件的函数
5.5 execlp函数:从PATH环境变量中查找文件并执行
5.6 execv函数:执行文件
5.7 execve函数:执行文件
5.8 execvp函数:执行文件
5.9 exit函数:结束进程运行的函数
5.10 _exit函数:结束进程运行的函数
5.11 fork函数:建立一个新的进程
5.12 getgid函数:取得实际进程组ID
5.13 getegid函数:取得有效进程组ID
5.14 getpid函数:取得有效组ID
5.15 getppid函数:取得父进程的进程识别码
5.16 getpriority函数:取得进程执行优先级
5.17 longjmp函数:跳到原先setjmp存储的堆栈环境
5.18 on_exit函数:设置程序正常结束前调用的函数
5.19 setjmp函数:存储当前堆栈环境
5.20 setgid函数:设置进程的进程组ID
5.21 setuid函数:设置进程组ID
5.22 setpriority函数:设置程序进程优先级
5.23 siglongjmp函数:跳到原先sigset jmp存储的堆栈环境
5.24 sigsetjmp函数:存储当前堆栈环境和屏蔽的信号集
5.25 system函数:执行Shell命令
5.26 vfork函数:建立一个新的进程
5.27 wait函数:等待子进程中断或结束
5.28 waitpid函数:等待子进程中断或结束
5.29 wait3函数:等待进程结束并且输出子进程统计信息
第6章 进程间通信函数
6.1 ftok函数:获得项目相关的IPC键值
6.2 msgctl函数:消息队列操作函数
6.3 msgget函数:创建或打开消息队列
6.4 msgrcv函数:读取消息队列
6.5 msgsnd函数:向消息队列中写入消息
6.6 semctl函数:信号量操作函数
6.7 semget函数:创建或打开信号量
6.8 semop函数:释放或获取信号量
6.9 shmat函数:导入共享内存
6.10 shmctl函数:共享内存操作函数
6.11 shmdt函数:将共享内存从程序中脱离
6.12 shmget函数:创建共享内存
6.13 mkfifo函数:创建fifo管道函数
6.14 pclose函数:关闭管道文件
6.15 pipe函数:创建匿名管道
6.16 popen函数:创建管道文件
第7章 信号函数
7.1 alarm函数:内核定时器函数
7.2 kill函数:信号发送函数
7.3 pause函数:进程暂停执行函数
7.4 raise函数:向进程自身发送信号函数
7.5 sigaction函数:高级信号处理方式设置函数
7.6 sigaddset函数:添加信号到信号集函数
7.7 sigdelset函数:删除信号集中对应信号函数
7.8 sigemptyset函数:清空信号集函数
7.9 sigfillset函数:填充信号集函数
7.10 sigismember函数:测试某个信号是否在信号集中
7.11 signal函数:信号处理方式设置函数
7.12 sigpause函数:暂停进程直到信号到来
7.13 sigpending函数:查询未决信号
7.14 sigprocmask函数:信号屏蔽函数
7.15 sigsuspend函数:暂停直到信号到来
7.16 sleep函数:让进程休眠一段时间
第8章 用户、组函数及环境变量函数
8.1 clearenv函数:删除所有环境变量的值
8.2 cuserid函数:获得用户名函数
8.3 endgrent函数:关闭系统组文件函数
8.4 endpwent函数:关闭系统口令函数
8.5 entent函数:关闭utmp文件
8.6 fgetgrent函数:从文件中读取组数据
8.7 fgetpwent函数:从文件中读取密码格式数据
8.8 getegid函数:获得有效(effective gid)组识别符
8.9 getenv函数:取得环境变量的值
8.10 geteuid函数:获得有效(effective uid)用户识别符
8.11 getgid函数:获得组识别符
8.12 getgrent函数:从文件/etc/group中读取组信息
8.13 getgrgid函数:从文件/etc/group中查找组信息
8.14 getgrnam函数:从文件/etc/group中查找组信息
8.15 getgroups函数:返回当前用户所属的组列表
8.16 getlogin函数:获取当前用户的账号名称
8.17 getpw函数:获取指定uid的用户信息
8.18 getpwent函数:读取/etc/passwd文件中的数据
8.19 getpwnam函数:以用户名获取用户信息
8.20 getpwuid函数:以用户ID获取用户信息
8.21 getuid函数:获取当前进程所属的用户ID
8.22 getutent函数:获取登录信息
8.23 getutid函数:获取指定用户ID的登录信息
8.24 getutline函数:查找指定的登录信息
8.25 initgroups函数:初始化组信息
8.26 logwtmp函数:添加登录记录信息
8.27 putenv函数:改变环境变量的值
8.28 pututline函数:添加登录信息
8.29 setegid函数:设置有效组ID
8.30 setenv函数:改变环境变量的值
8.31 seteuid函数:设置有效用户ID
8.32 setfsgid函数:设置进程的文件系统的组ID
8.33 setfsuid函数:设置进程的文件系统的用户ID
8.34 setgid函数:设置进程的组ID
8.35 setgrent函数:将文件etc/group的读写位置移动到起始位置
8.36 setgroups函数:设置当前进程的组识别符
8.37 setpwent函数:将文件etc/passwd的读写位置移动到起始位置
8.38 setregid函数:设置当前进程的真实以及有效组ID
8.39 setreuid函数:设置当前进程的真实以及有效用户ID
8.40 setuid函数:设置进程的用户ID
8.41 setutent函数:将文件utmp的读写位置移动到起始位置
8.42 unsetenv函数:清除环境变量的值
8.43 updwtmp函数:将登录数据记录写入utmp文件
8.44 utmpname函数:设置文件utmp的绝对位置
第9章 错误处理与内存分配函数
9.1 brk函数:改变数据段大小
9.2 calloc函数:内存分配函数
9.3 ferror函数:文件错误判断
9.4 free函数:释放动态分配内存函数
9.5 getpagesize函数:获得操作系统内存页大小函数
9.6 malloc函数:动态内存分配函数
9.7 mmap函数:文件映射函数
9.8 munmap函数:释放映射的内存地址
9.9 perror函数:错误原因输出函数
9.10 realloc函数:内存截取函数
9.11 sbrk函数:增加数据空间
9.12 strerror函数:错误代码查询
第10章 日志函数、动态函数与正则表达式函数
10.1 closelog函数:关闭信息记录
10.2 dlclose函数:关闭动态库文件
10.3 dlerror函数:动态函数出错处理
10.4 dlopen函数:打开动态库文件
10.5 dlsym函数:在动态库文件中查找函数
10.6 openlog函数:打开记录信息
10.7 regcomp函数:编译正则表达式
10.8 regerror函数:编译错误判断函数
10.9 regexec函数:执行正则匹配
10.10 regfree函数:释放正则模式串资源
10.11 syslog函数:输出记录信息
第11章 时间函数
11.1 asctime函数:字符串时间操作函数
11.2 clock函数:计算运行时间函数
11.3 ctime函数:字符串时间函数
11.4 difftime函数:计算时间差函数
11.5 ftime函数:取得系统时间
11.6 gettimeofday函数:取得系统当前时间
11.7 gmtime函数:日历时间格式函数
11.8 localtime函数:获得当前系统时间
11.9 mktime函数:系统时间转换函数
11.10 settimeofday函数:系统时间设置函数
11.11 strftime函数:时间格式化输出函数
11.12 time函数:获得系统当前时间
11.13 tzset函数:设置系统时区变量tzname
第12章 socket相关函数
12.1 accept函数:处理socket请求函数
12.2 bind函数:将socket描述符与一个套接口绑定
12.3 connect函数:与远程主机连接
12.4 endprotoent函数:结束网络协议的读取函数
12.5 endservent函数:关闭文件/etc/services
12.6 gethostbyaddr函数:由IP获得主机信息
12.7 gethostbyname函数:由主机名获得主机信息
12.8 getprotobyname函数:由协议名获取协议数据
12.9 getprotobynumber函数:由协议编号获取协议数据
12.10 getprotoent函数:读取文件/etc/rotoent中的网络协议数据
12.11 getservbyname函数:获得网络服务协议数据
12.12 getservbyport函数:获得网络服务协议数据
12.13 getservent函数:读取主机网络服务数据
12.14 getsockopt函数:获得指定socket描述符的状态
12.15 herror函数:错误原因输出函数
12.16 hstrerror函数:错误代码查询
12.17 htonl函数:地址字节顺序转换
12.18 htons函数:地址字节顺序转换
12.19 inet_addr函数:网络地址类型转换
12.20 inet_aton函数:网络地址类型转换
12.21 inet_ntoa函数:网络地址类型转换
12.22 listen函数:网络socket监听
12.23 ntohl函数:地址字节顺序转换
12.24 ntohs函数:地址字节顺序转换
12.25 recv函数:接收消息
12.26 recvfrom函数:接收消息
12.27 recvmsg函数:多缓冲读取数据
12.28 send函数:向远程主机发送数据
12.29 sendto函数:发送数据到远程主机
12.30 setprotoent函数:打开网络协议文件
12.31 setservent函数:打开网络服务文件
12.32 setsockopt函数:设置socket描述符的状态
12.33 shutdown函数:结束socket套接字
12.34 socket函数:创建网络套接字
第13章 字符测试函数
13.1 isalnum函数:判断字符是否为英文字母或数字
13.2 isalpha函数:判断字符是否为英文字母
13.3 isascii函数:判断字符是否为ASCII字符
13.4 isblank函数:判断字符是否为空白字符
13.5 iscntrl函数:判断字符是否为ASCII的控制字符
13.6 isdigit函数:判断字符是否为阿拉伯数字
13.7 isgraph函数:判断字符是否为可打印字符
13.8 islower函数:判断字符是否为小写英文字母
13.9 isprint函数:判断字符是否为可打印字符
13.10 isspace函数:判断字符是否为空格字符
13.11 ispunct函数:判断字符是否为标点符号
13.12 isupper函数:判断字符是否为大写英文字母
13.13 isxdigit函数:判断字符是否为十六进制数字
第14章 数据转换函数
14.1 atof函数:将字符串转换成浮点数
14.2 atoi函数:将字符串转换成整数
14.3 atol函数:将字符串转换成长整数
14.4 ecvt函数:将浮点数转换成字符串
14.5 fcvt函数:将浮点数转换成字符串
14.6 gcvt函数:将浮点数转换成字符串
14.7 strtod函数:将字符串转换成浮点数
14.8 strtol函数:将字符串转换成长整数
14.9 strtoul函数:将字符串转换成无符号长整数
14.10 toascii函数:将整数转换成合法的ASCII字符
14.11 tolower函数:将大写字母转换成小写字母
14.12 toupper函数:将小写字母转换成大写字母
第15章 字符串处理函数
15.1 bcmp函数:比较两块内存中的内容
15.2 b函数:复制内存中的内容
15.3 bzero函数:将一块内存内容全清零
15.4 ffs函数:在一个整数中查找第一个值为真的位
15.5 index函数:查找字符串中第一个出现的指定字符
15.6 memccpy函数:复制内存中的内容
15.7 memchr函数:在一块内存指定范围查找一个指定字符
15.8 memcmp函数:比较内存中存放的内容
15.9 memcpy函数:复制一块内存内容到另一块中
15.10 memfrob函数:对某个内存区重新编码
15.11 memmove函数:复制内存内容
15.12 memset函数:将某值填入到一块内存区域
15.13 rindex函数:查找字符串中最后一个出现的指定字符
15.14 strcasecmp函数:忽略大小写比较字符串
15.15 strcat函数:将一个字符串连接另一字符串的尾部
15.16 strchr函数:查找字符串中指定字符
15.17 strcmp函数:比较两个字符串
15.18 strcoll的函数:根据当前环境信息来比较字符串
15.19 strcpy函数:复制一个字符串的内容到另一个字符串中
15.20 strcspn函数:计算字符串中由非指定字符集字符组成的子字符串的长度
15.21 strp函数:复制字符串内容
15.22 strfry函数:随机重组一个字符串
15.23 strlen函数:返回字符串长度
15.24 strncasecmp函数:忽略大小写比较两个字符串
15.25 strncat函数:将一个字符串的前n个字符连接到另一字符串的尾部
15.26 strncmp函数:比较两个字符串
15.27 strncpy函数:复制字符串
15.28 strpbrk函数:查找字符串中第一个出现的指定字符
15.29 strrchr函数:查找字符串中最后一个出现的指定字符
15.30 strspn函数:计算字符串中由指定字符集字符组成的子字符串的长度
第16章 数学计算函数
16.1 abs函数:计算整数的绝对值
16.2 acos函数:计算反余弦的值
16.3 asin函数:计算反正弦的值
16.4 atan函数:计算反正切的值
16.5 atan2函数:计算反正切的值
16.6 ceil函数:计算大于或等于给定参数的最小整数
16.7 cos函数:计算余弦的值
16.8 cosh函数:计算双曲线的余弦值
16.9 div函数:计算两整数相除后的商和余数
16.10 exp函数:计算浮点数的指数
16.11 fabs函数:计算浮点数的绝对值
16.12 frexp函数:计算浮点数的尾数和指数
16.13 hypot函数:计算直角三角形斜边长度
16.14 labs函数:计算长整数的绝对值
16.15 ldexp函数:计算浮点数与2的exp次方的积
16.16 ldiv函数:计算两长整数相除后的商和余数
16.17 log函数:计算以e为底的对数值
16.18 log10函数:计算以10为底的对数值
16.19 modf函数:将浮点数分解为小数和整数两部分
16.20 pow函数:计算次方值
16.21 sin函数:取正弦的值
16.22 sinh函数:计算双曲线的正弦值
16.23 sqrt函数:计算浮点数的平方根
16.24 tan函数:计算角度的正切值
16.25 tanh函数:计算双曲线的正切函数值
第17章 随机数及数据加密函数
17.1 crypt函数:对字符串使用DES算法编码
17.2 drand48函数:产生一个正的随机浮点数
17.3 erand48函数:产生一个正的随机浮点数
17.4 initstate:建立随机数状态数组
17.5 jrand48函数:产生一个长整型的随机数
17.6 lcong48函数:设置48位运算的随机数种子
17.7 lrand48函数:产生一个正的长整型随机数
17.8 mrand48函数:产生一个长整型随机数
17.9 nrand48函数:产生一个正的长整数随机数
17.10 rand函数:产生伪随机数
17.11 random函数:产生随机数
17.12 seed48函数:设置48位运算的随机数种子
17.13 setstate函数:建立随机数状态数组
17.14 srand函数:设置随机数种子
17.15 srand48函数:设置48位运算的随机数种子
17.16 srandom函数:设置随机数种子
17.17 getpass函数:取得用户输入密码字符串
第18章 数据结构函数
18.1 bsearch函数:在有序数组中二分查找数据
18.2 hcreate函数:建立哈希表
18.3 hdestroy函数:删除哈希表
18.4 hsearch函数:在哈希表中查找关键数据
18.5 lfind函数:线性搜索
18.6 lsearch函数:线性搜索
18.7 qsort函数:使用快速排序法排列数组
18.8 tdelete函数:从二叉树中删除数据
18.9 tfind函数:搜索二叉树
18.10 tsearch函数:搜索二叉树
18.11 twalk函数:遍历二叉树
第19章 其他函数
19.1 getopt函数:分析命令参数
19.2 isatty函数:判断文件描述符是否为终端
19.3 pselect函数:多路转接I/O
19.4 select函数:多路I/O转接
19.5 ttyname函数:返回终端机的名称
附录A Linux函数的首字母索引
附录B Linux指令的首字母索引
❻ 求助Linux下带特殊字符的字符串查找方法!
查找目录下的所有文件中是否含有某个字符串
find .|xargs grep -ri "IBM"
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find .|xargs grep -ri "IBM" -l
推荐使用正则表达式
(1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。
(2)基本元字符集及其含义
^ :只匹配行首。 如^a 匹配以a开头的行abc,a2e,a12,aaa,......
$ :只匹配行尾。 如^a 匹配以a结尾的行bca,12a,aaa,.......
* :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,....
[] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345]
\ :只用来屏蔽一个元字符的特殊含义。 如\*,\',\",\|,\+,\^,\. 等
.:(点)只匹配任意单字符。
pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数。如a\{2\}匹配aa.
pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,.....
pattern\{n,m\}:含义同上,但次数在n和m之间。如a\{2,4\}匹配aa,aaa,aaaa三个
(3)举例说明:
^$ :匹配空行
^.$ :匹配包含一个字符的行
\*\.pas :匹配以*.pas结尾的所有字符或文件
[0123456789]或[0-9] :假定要匹配任意一个数字
[a-z] :任意小写字母
[A-Za-z] :任意大小写字母
[S,s] :匹配大小写S
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三个0-9组成的字符串;\. :匹配点(注意这里点是特殊的字符,所以要用"\"来屏蔽其含义)
❼ linux 下如何知道一个文件是关闭状态
下面是读取一个文件 并复制成新文件
#include <string.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
int main(int argc, char **argv)
{
FILE *from_fd;
FILE *to_fd;
long file_len = 0;
char buffer[BUFFER_SIZE];
char *ptr;
//判断传入参数
if(argc != 3)
{
printf("Usage: %s fromfile tofile", argv[0]);
exit(1); //异常退出返回1
}
//打开原文件
if((from_fd = fopen(argv[1], "rb")) == NULL)
{
printf("Read %s Error\n", argv[1]);
exit(1);
}
//创建目的文件
if((to_fd = fopen(argv[2], "wb")) == NULL)
{
printf("Write %s Error\n", argv[2]);
exit(1);
}
//侧得文件大小
fseek(from_fd, 0L, SEEK_END);
file_len = ftell(from_fd);
fseek(from_fd, 0L, SEEK_SET);
printf("from file size is = %ld\n", file_len);
//进行文件拷贝
while(!feof(from_fd))
{
fread(buffer, BUFFER_SIZE, 1, from_fd);
//fread 为c标准库里函数 // read 为Linux系统调用, 返回成功读取了多少字节 出错则返回-1
if(BUFFER_SIZE >= file_len)
{
fwrite(buffer, file_len, 1, to_fd);
}
else
{
fwrite(buffer, BUFFER_SIZE, 1, to_fd);
file_len = file_len - BUFFER_SIZE;
printf(" success!\n");
}
bzero(buffer, BUFFER_SIZE);
}
fclose(from_fd);
fclose(to_fd);
exit(0); //返回0 表示成功
}