導航:首頁 > 文件教程 > linux文件按照順序讀

linux文件按照順序讀

發布時間:2023-08-16 09:22:06

linux文件系統採用哪種物理結構,有什麼優點和缺點

一、順序結構

優點:

1、支持順序存取和隨機存取。

2、順序存取速度快。

3、所需的磁碟尋道次數和尋道時間最少。

缺點:

1、需要為每個文件預留若干物理塊以滿足文件增長的部分需要。

2、不利於文件插入和刪除。

二、鏈式結構

優點:

1、提高了磁碟空間利用率,不需要為每個文件預留物理塊。

2、有利於文件插入和刪除。

3、有利於文件動態擴充。

缺點:

1、存取速度慢,不適於隨機存取。

2、當物理塊間的連接指針出錯時,數據丟失。

3、更多的尋道次數和尋道時間。

4、鏈接指針佔用一定的空間,降低了空間利用率。

三、索引結構

優點:

1、不需要為每個文件預留物理塊。

2、既能順序存取,又能隨機存取。

3、滿足了文件動態增長、插入刪除的要求。

缺點:

1、較多的尋道次數和尋道時間。

2、索引表本身帶來了系統開銷。如:內外存空間,存取時間等。

拓展資料:

文件存取方法:

順序存取:順序存取是按照文件的邏輯地址順序存取。

固定長記錄的順序存取是十分簡單的。讀操作總是讀出上一次讀出的文件的下一個記錄,同時,自動讓文件記錄讀指針推進,以指向下一次要讀出的記錄位置。如果文件是可讀可寫的。再設置一個文件記錄指針,它總指向下一次要寫入記錄的存放位置,執行寫操作時,將一個記錄寫到文件 末端。允許對這種文件進行前跳或後退N(整數)個記錄的操作。順序存取主要用於磁帶文件,但也適用於磁碟上的順序文件。

可變長記錄的順序文件,每個記錄的長度信息存放於記錄前面一個單元中,它的存取操作分兩步進行。讀出時,根據讀指針值先讀出存放記錄長度的單元 。然後,得到當前記錄長後再把當前記錄一起寫到指針指向的記錄位置,同時,調整寫指針值 。

由於順序文件是順序存取的,可採用成組和分解操作來加速文件的輸入輸出。


直接存取(隨機存取法):

很多應用場合要求以任意次序直接讀寫某個記錄。例如,航空訂票系統,把特定航班的所有信息用航班號作標識,存放在某物理塊中,用戶預訂某航班時,需要直接將該航班的信息取出。直接存取方法便適合於這類應用,它通常用於磁碟文件。

為了實現直接存取,一個文件可以看作由順序編號的物理塊組成的,這些塊常常劃成等長,作為定位和存取的一個最小單位,如一塊為1024位元組、4096位元組,視系統和應用而定。於是用戶可以請求讀塊22、然後,寫塊48,再讀塊9等等。直接存取文件對讀或寫塊的次序沒有限制。用戶提供給操作系統的是相對塊號,它是相對於文件開始位置的一個位移量,而絕對塊號則由系統換算得到。


索引存取:

第三種類型的存取是基於索引文件的索引存取方法。由於文件中的記錄不按它在文件中的位置,而按它的記錄鍵來編址,所以,用戶提供給操作系統記錄鍵後就可查找到所需記錄。通常記錄按記錄鍵的某種順序存放,例如,按代表健的字母先後次序來排序。對於這種文件,除可採用按鍵存取外,也可以採用順序存取或直接存取的方法。信息塊的地址都可以通過查找記錄鍵而換算出。實際的系統中,大都採用多級索引,以加速記錄查找過程。

② linux c怎麼實現從文件的最後一行一行向前讀文件

下面的例子使用mmap讀最後20行(假設最後20行不會超過位元組)
/*-
* Copyright (C), 1988-2014, mymtom
*
* vi:set ts=4 sw=4:
*/
#ifndef lint
static const char rcsid[] = "$Id$";
#endif /* not lint */
/**
* @file last20.c
* @brief
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
char *memchrr(const void *v1, const char *v2, int c)
{
char *s1, *s2;
char *p;
s1 = (char *)v1;
s2 = (char *)v2;
for (p = s2; p >= s1; --p) {
if (*p == c)
return p;
}
return NULL;
}
#define READSIZE 1024
int main(int argc, char *argv[])
{
int ret;
FILE *fp;
char *addr;
size_t len;
int prot;
int flags;
int fd;
off_t off;
off_t rem;
long pagesize;
struct stat buf;
pagesize = sysconf(_SC_PAGESIZE);
fp = fopen("last20.c", "rb");
fd = fileno(fp);
ret = fstat(fd, &buf);
if (buf.st_size <= READSIZE || buf.st_size <= pagesize) {
off = 0;
len = buf.st_size;
} else {
off = buf.st_size - READSIZE;
rem = off % pagesize;
off = off - rem;
len = READSIZE + rem;
}
/*
printf("size=%d READSIZE=%d off=%d len=%d\n",
(int)buf.st_size, (int)READSIZE, (int)off, (int)len);
*/
prot = PROT_READ;
flags = MAP_PRIVATE;
addr = mmap(NULL, len, prot, flags, fd, off);
fclose(fp);
{
int i, n;
char *head, *tail;
size_t size;
char line[1024];
tail = addr + len - 1;
n = 20;
for (i = 0; i < n; ++i) {
head = memchrr(addr, tail - 1, '\n');
if (head == NULL) {
size = tail - addr;
memcpy(line, addr, size);
line[size] = '\0';
} else {
size = tail - head - 1;
memcpy(line, head + 1, size);
line[size] = '\0';
tail = head;
}
printf("%s\n", line);
if (head == NULL) {
break;
}
}
}
munmap(addr, len);
return 0;
}
運行結果為:
./last20 | tac | cat -n
line[size] = '\0';
} else {
size = tail - head - 1;
memcpy(line, head + 1, size);
line[size] = '\0';
tail = head;
}
printf("%s\n", line);
if (head == NULL) {
break;
}
}
}
munmap(addr, len);
return 0;
}

③ linux中如何對一個文本內容進行排序呢

功能說明:將文本文件內容加以排序。
語法:sort
[-bcdfimMnr][-o<輸出文件>][-t<分隔字元>][+<起始欄位>-<結束欄位>][--help][--verison][文件]
補充說明:sort可針對文本文件的內容,以行為單位來排序。
參數:
-b
忽略每行前面開始出的空格字元。
-c
檢查文件是否已經按照順序排序。
-d
排序時,處理英文字母、數字及空格字元外,忽略其他的字元。
-f
排序時,將小寫字母視為大寫字母。
-i
排序時,除了040至176之間的ASCII字元外,忽略其他的字元。
-m
將幾個排序好的文件進行合並。
-M
將前面3個字母依照月份的縮寫進行排序。
-n
依照數值的大小排序。
-o<輸出文件>
將排序後的結果存入指定的文件。
-r
以相反的順序來排序。
-t<分隔字元>
指定排序時所用的欄位分隔字元。
+<起始欄位>-<結束欄位>
以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位。
--help
顯示幫助。
--version
顯示版本信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面通過幾個例子來講述Sort的使用。
用Sort命令對text文件中各行排序後輸出其結果。請注意,在原文件的第二、三行上的第一個單詞完全相同,該命令將從它們的第二個單詞vegetables與fruit的首字元處繼續進行比較。
$
cat
text
vegetable
soup
fresh
vegetables
fresh
fruit
lowfat
milk
$
Sort
text
fresh
fruit
fresh
vegetables
lowfat
milk
vegetable
soup
用戶可以保存排序後的文件內容,或把排序後的文件內容輸出至列印機。下例中用戶把排序後的文件內容保存到名為result的文件中。
$
Sort
text>result
以第2個欄位作為排序關鍵字對文件example的內容進行排序。
$
Sort
+1-2
example
對於file1和file2文件內容反向排序,結果放在outfile中,利用第2個欄位的第一個字元作為排序關鍵字。
$
Sort
-r
-o
outfile
+1.0
-1.1
example
Sort排序常用於在管道中與其他命令連用,組合完成比較復雜的功能,如利用管道將當前工作目錄中的文件送給Sort進行排序,排序關鍵字是第6個至第8個欄位。
$
ls
-
l
|
Sort
+5
-
7
$
ps
-e
-o
"
comm
pid
time"|Sort
-d
//按照command的首字母的字母順序排序
Sort命令也可以對標准輸入進行操作。例如,如果您想把幾個文件文本行合並,並對合並後的文本行進行排序,您可以首先用命令cat把多個文件合
並,然後用管道操作把合並後的文本行輸入給命令Sort,Sort命令將輸出這些合並及排序後的文本行。在下面的例子中,文件veglist與文件
fruitlist的文本行經過合並與排序後被保存到文件clist中。
$
cat
veglist
fruitlist
|
Sort
>
clist

④ linux 中 ll 命令如何讓查詢結果按時間升序或降序排序

1、用CRT軟體連接一個Linux系統 。

⑤ linux系統下,按文件的大小進行排序的命令

ls -lAS
l 是按列顯示許多參數
A是顯示除了. 和..之外的所有文件
S是按照文件大小排序

⑥ linux文件排序問題

在命令行窗口輸入「ls」 命令

java:為什麼在Linux中讀取文件的順序有差異呢

首先說下為什麼unix裡面取得的文件列表次序是亂的, 因為listFiles方法實際調用的是

publicnativeString[]list(Filef);

這個不同系統不同的實現方法, 所以這個就不深究了, 要次序只能手動排序. 或者你研究下unix裡面的文件排序方式

第二個問題: 為什麼輸出結果卻只是0、3、4、7、8 我的猜想是這句代碼造成的:

tm.put(modifytimeL,files[i]);	

如果某幾個文件的modifytimeL是一樣的,那麼新put的就會覆蓋掉舊put的

閱讀全文

與linux文件按照順序讀相關的資料

熱點內容
覺醒年代哪個app可以免費觀看 瀏覽:830
如何關閉win10觸摸屏幕 瀏覽:761
蘋果142不能傳文件 瀏覽:128
如何看歷史底部數據 瀏覽:230
怎麼在電腦上下軟體或安裝app 瀏覽:798
qq頭像電影截圖情侶 瀏覽:87
安卓的網路位置設置在哪 瀏覽:973
編程俠官網如何登錄 瀏覽:484
借貸王app怎麼樣 瀏覽:552
qq黑鑽手機怎麼開通 瀏覽:465
dnf85版本爆ss視頻 瀏覽:514
gitlog前一個版本 瀏覽:718
蘋果6手機屏幕周邊多出一圈黑色 瀏覽:131
phpword插件 瀏覽:264
win10重置並清理驅動器 瀏覽:893
vector去重java 瀏覽:572
qq群文件過期了怎麼辦 瀏覽:184
電子文件的特性 瀏覽:190
javatcp接收數據 瀏覽:968
編程什麼最好做 瀏覽:872

友情鏈接