wget -i [文件名] -P [保存位置]
文件中,一行一个URL
⑵ linux c读取文件中特定格式的内容
用指针循环移动 判断是不是你对应的数据 16进制的 只能这么处理
⑶ Linux shell脚本for循环中in的[数据列表]从文件中取得
for i in $(cat test)
可以试试看, for之前可以指定分隔符号.
另外一般用 while read 读取文件
还有其实上面两种都内不好, 现在主流容的做法还是awk和sed处理文件, 功能强 安全
⑷ Linux里面tail -f命令作用是什么
1.命令格式:
tail[必要的参数][选择参数][文件]
2.命令功能:
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
3.命令参数:
-f循环读取
-q不显示处理信息
-v显示详细的处理信息
-c显示的字节数
-n显示行数
--pid=PID与-f 何用,表示在进程ID,PID死掉之后结束
-s--sleep-interval=S与 -f 合用,表示在每次反复的间隔休眠S秒
-q--quiet--silent从不输出给出文件名的首部Linux中的tail命令的具体例子
1、tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。
⑸ linuxC++编程,怎么读取一个目录下不断产生的文件
set<string> file;
while
pdir = opendir(path)
while tmp = readdir(pdir) != null
file.find(tmp) ==file.end()? file.inert(tmp):continue;
sleep
⑹ Linux shell执行错误
1.文件描述符
在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名:
文件 文件描述符
输入文件—标准输入 0(缺省是键盘,为0时是文件或者其他命令的输出)
输出文件—标准输出 1(缺省是屏幕,为1时是文件)
错误输出文件—标准错误 2(缺省是屏幕,为2时是文件)
系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9.
2.文件重定向:改变程序运行的输入来源和输出地点
2.1.输出重定向:
Command > filename 把标准输出重定向到一个新文件中
Command >> filename 把标准输出重定向到一个文件中(追加)
Command > filename 把标准输出重定向到一个文件中
Command > filename 2>&1 把标准输出和错误一起重定向到一个文件中
Command 2 > filename 把标准错误重定向到一个文件中
Command 2 >> filename 把标准输出重定向到一个文件中(追加)
Command >> filename2>&1 把标准输出和错误一起重定向到一个文件(追加)
2.2.输入重定向:
Command < filename > filename2 Command命令以filename文件作为标准输入,以filename2文件作为标准输出
Command < filename Command命令以filename文件作为标准输入
Command << delimiter 从标准输入中读入,知道遇到delimiter分界符
2.3.绑定重定向
Command >&m 把标准输出重定向到文件描述符m中
Command < &- 关闭标准输入
Command 0>&- 同上
3.shell重定向的一些高级用法
3.1.重定向标准错误
例子1:
command 2> /dev/null
如果command执行出错,将错误的信息重定向到空设备
例子2:
command > out.put 2>&1
将command执行的标准输出和标准错误重定向到out.put(也就是说不管command执行正确还是错误,输出都打印到out.put)。
3.2.exec用法
exec命令可以用来替代当前shell;换句话说,并没有启动子shell,使用这一条命令时任何现有环境变量将会被清除,并重新启动一个shell(重新输入用户名和密码进入)。
exec command
其中,command通常是一个shell脚本。
对文件描述符操作的时候用(也只有再这时候),它不会覆盖你当前的shell
例子1:
#!/bin/bash
#file_desc
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
其中:
首先,exec 3<&0 0<name.txt的意思是把标准输入重定向到文件描述符3(0表示标准输入),然后把文件name.txt内容重定向到文件描述符0,实际上就是把文件name.txt中的内容重定向到文件描述符3。然后通过exec打开文件描述符3;
然后,通过read命令读取name.txt的第一行内容line1,第二行内容line2,通过Exec 0<&3关闭文件描述符3;
最后,用echo命令输出line1和line2。最好在终端运行一下这个脚本,亲自尝试一下。
例子2:
exec 3<>test.sh;
#打开test.sh可读写操作,与文件描述符3绑定
while read line<&3
do
echo $line;
done
#循环读取文件描述符3(读取的是test.sh内容)
exec 3>&-
exec 3<&-
#关闭文件的,输入,输出绑定
⑺ linux 为什么while(dirp = readdir(dp) != NULL)可以实现循环读取呢..谁能给我说
opendir和readdir的原理决定的
你可以认为 opendir后 打开的是一个文件夹,这个文件夹指向一个结构体
也就是返回的dp
而dp里面有一个链表,或者数组
每次readdir就把这个数据向前移动一位,并返回当前文件节点dirp
等这个链表 移动到尾部,就是返回NULL,这时就代表遍历结束了。
⑻ Linux shell脚本for循环中in的[数据列表]从文件中取得
for i in $(cat test)
可以试试看, for之前可以指定分隔符号.
另外一般用 while read 读取文件
还有其实上面两种都不好专, 现在主属流的做法还是awk和sed处理文件, 功能强 安全
⑼ Linux下怎么读取多个进程的信息
首先说说DIR这一结构体,以下为DIR结构体的定义:
struct __dirstream
{
void *__fd;
char *__data;
int __entry_data;
char *__ptr;
int __entry_ptr;
size_t __allocation;
size_t __size;
__libc_lock_define (, __lock)
};
typedef struct __dirstream DIR;
DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自《UNIX环境高级编程(第二版)》)。函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用:
struct dirent *readdir(DIR *dp);
void rewinddir(DIR *dp);
int closedir(DIR *dp);
long telldir(DIR *dp);
void seekdir(DIR *dp,long loc);
关于DIR结构,我们知道这么多就可以了,没必要去再去研究他的结构成员。
接着是dirent结构体,首先我们要弄清楚目录文件(directory file)的概念:这种文件包含了其他文件的名字以及指向与这些文件有关的信息的指针(摘自《UNIX环境高级编程(第二版)》)。从定义能够看出,dirent不仅仅指向目录,还指向目录中的具体文件,readdir函数同样也读取目录下的文件,这就是证据。以下为dirent结构体的定义:
struct dirent
{
long d_ino; /* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen; /* length of this d_name 文件名长 */
unsigned char d_type; /* the type of d_name 文件类型 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}
然后是怎么使用它读取进程信息。可以用这些函数来读取/proc下的文件夹,然后做一个判断,只要文件夹的名字开头是1-9的,就进入目录读取其中的status文件,然后输出信息。
代码
#include <stdio.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
typedef struct{
pid_t pid;
char name[256];//进程名称
int vmsize;//虚拟内存信息
}proc_info_st;//保存读取的进程信息
#define PROC_NAME_LINE 1//名称所在行
#define PROC_PID_LINE 4//pid所在行
#define PROC_VMSIZE_LINE 12//虚拟内存所在行
#define BUFF_LEN 1024 //行缓冲区的长度
#ifndef TRUE
# define TRUE 1
#endif
#ifndef FALSE
# define FALSE 0
#endif
void read_proc(proc_info_st* info,const char* c_pid);//读取进程信息
int read_line(FILE* fp,char* buff,int b_l,int l);//读取一行
int main()
{
//打开目录
DIR *dir;
struct dirent *ptr;
if (!(dir = opendir("/proc")))
return 0;
//读取目录
while (ptr = readdir(dir))
{//循环读取出所有的进程文件
if (ptr->d_name[0] > '0' && ptr->d_name[0] <= '9')
{
//获取进程信息
proc_info_st info;
read_proc(&info,ptr->d_name);//读取信息
printf("pid:%d\npname:%s\nvmsize:%d\n",info.pid,info.name,info.vmsize);
printf("\n\n");//再空两行
}
}
}
/**************************************************
**说明:根据进程pid获取进程信息,存放在proc_info_st结构体中
**
**输入:
** /proc_info_st* info 返回进程信息
** /char* c_pid 进程pid的字符串形式
**
**
**
*************************************************/
void read_proc(proc_info_st* info,const char* c_pid)
{
FILE* fp = NULL;
char file[512] = {0};
char line_buff[BUFF_LEN] = {0};//读取行的缓冲区
sprintf(file,"/proc/%s/status",c_pid);//读取status文件
if (!(fp = fopen(file,"r")))
{
printf("read %s file fail!\n",file);
return;
}
char name[32];
//先读取进程名称
if (read_line(fp,line_buff,BUFF_LEN,PROC_NAME_LINE))
{
sscanf(line_buff,"%s %s",name,(info->name));
}
fseek(fp,0,SEEK_SET);//回到文件头部
//读取进程pid
if (read_line(fp,line_buff,BUFF_LEN,PROC_PID_LINE))
{
sscanf(line_buff,"%s %d",name,&(info->pid));
}
fseek(fp,0,SEEK_SET);//回到文件头部
//读取进程vmsize
if (read_line(fp,line_buff,BUFF_LEN,PROC_VMSIZE_LINE))
{
sscanf(line_buff,"%s %d",name,&(info->vmsize));
}
fclose(fp);
}
/**************************************************
**说明:读取文件的一行到buff
**
**输入:
** /FILE* fp 文件指针
** /char* buff 缓冲区
** /int b_l 缓冲区的长度
** /l 指定行
**
**输出:
** /true 读取成功
** /false 读取失败
*************************************************/
int read_line(FILE* fp,char* buff,int b_l,int l)
{
if (!fp)
return FALSE;
char line_buff[b_l];
int i;
//读取指定行的前l-1行,转到指定行
for (i = 0; i < l-1; i++)
{
if (!fgets (line_buff, sizeof(line_buff), fp))
{
return FALSE;
}
}
//读取指定行
if (!fgets (line_buff, sizeof(line_buff), fp))
{
return FALSE;
}
memcpy(buff,line_buff,b_l);
return TRUE;
}
如果你想更深入的了解一些东西可以参考下http://www.linuxprobe.com/chapter-09.html,希望能对你有帮助
⑽ linux写入文件命令
cat yourfile|while read line;do echo $line > filetosave;dosomethine;done
上面的 yourfile 为你要读取的文件,filetosave为保存每行的文件,dosomething为你执行的动作版。
上面是循环读取每行到文件filetosave 一直到文件结权束,filetosave每次都只有一行内容;