導航:首頁 > 文件類型 > linux循環讀取文件

linux循環讀取文件

發布時間:2022-09-17 15:33:03

linux wget 或curl 能從文件讀取嗎

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每次都只有一行內容;

閱讀全文

與linux循環讀取文件相關的資料

熱點內容
港澳台版本有什麼區別 瀏覽:263
java四個月能學到什麼 瀏覽:46
開發板和linux文件 瀏覽:202
appstore外國帳號怎麼看預約游戲 瀏覽:137
有什麼免費加速網站的cdn 瀏覽:781
哪個文件存在最安全 瀏覽:199
淘寶導航欄分割線代碼 瀏覽:271
win10開不了機按f8沒用 瀏覽:12
河南營銷網站推廣多少錢 瀏覽:135
華為暢享6手機文件管理 瀏覽:939
linux驅動環境 瀏覽:893
ae用什麼打開文件 瀏覽:877
湖南嶽陽大數據中心 瀏覽:710
DSP大數據公司 瀏覽:510
win10檢測不到u盤啟動 瀏覽:941
電腦文件怎麼重命名文件 瀏覽:507
哪個協議用來傳輸文件協議 瀏覽:61
ce改股票教程 瀏覽:513
如何做一個數據統計資料庫 瀏覽:181
手機內存書旗小說是哪個文件夾 瀏覽:879

友情鏈接