㈠ linux下 對文件的 操作,用fopen fread,fwrite等,還是用open read,write哪個更好呢
上面幾位都說到點子上了,fopen系的函數是C標准庫的函數中操作文件流的函數(有緩沖)頭文件stdio.h,open系的函數是posix規范的介面,沒緩沖,頭文件估計是io.h還是unistd.h我記不到了。返回值不一樣(一個結構體指針一個int)然後就是open系的可以做更多的事,但fopen移植性好。這個看你的需求來用,順便一提,win下mingw支持很多posix的函數(但至少fork,exec不支持,spawn倒是支持)
㈡ linux系統中,有哪些系統調用的函數
Linux下對文件操作有兩種方式:系統調用(system call)和庫函數調用(Library functions)。系統調用實際上就是指最底層的一個調用,在linux程序設計裡面就是底層調用的意思。面向的春蠢仔是檔猜硬體。而庫函數調用則面向的是應用開發的,相當於扒汪應用程序的api...
㈢ 在linux下操作文件,是用linux提供的fcntl.h還是用C++提供的fstream.h
1、fcntl.h定義了一組基於C的非緩沖的文件操作函數,可用於文件和設備(及socket等)的I/O操作。另外在stdio.h中定義了一組標准I/O函數,提供了帶緩沖的文件操作功能(與非緩沖文件操作對應),它們多用於常規文件的操作。
2、fstream.h(fstream)定義了一個C++的流類,提供對文件的流式訪問。
在linux系統早乎中,可彎睜基以根據你的應用需求選擇使用它埋謹們。
㈣ linux系統調用文件函數write()怎麼往文件里寫入換行
參考一下吧,
strcat(buf," ");
將你要寫的數據放在buf中,利鎮知敗用strcat函數在後面拼接上換行符
int fd=open("/home/wang/time.log",O_CREAT|O_RDWR,0666);
打開(創建)你要操作的文件
write(fd,buf,sizeof(buf));
向文件中寫入數據
下面是我創建的守護進程列印的日誌文件御顫信息,文件為time.log。內容時每兩秒向文件中寫猛旁入當前時間
㈤ Linux p p2函數理解
在linux中,我們需要復制文件描述符,下面是我對文件描述符的理解
int p(int fd); // 復制一個已經存在的文件描述符,如果成功,返回復製成功後的文件描述符,失敗返回-1
int p(int fd, int fd2); // 復制一個文件描述符,fd表示已經存在的打開的文件描述符,fd2是指定新的文件描述符,如果fd2等於fd,則直接返回,如果fd2存在並且打開,則先close(fd2)後,重新打開,這樣fd2和fd就指向了同一個文件(共享打開的文件),如果fd2不存在或者沒有打開,則打開fd2,並且指向fd所指向的文件。函數的返回值和fd2一致。該函數可以實現文件的重定位。
每個進程都有一個文件描述符表,每個描述符佔用一個描述符項,每個文件描述符可以描述成這樣
struct fileDescription {
int index;
void *pointer;
};
除了整形,還有一個指針,指向文件表,內核為所有打開文件維持一張文件表,每個文件表項包含:
1)文件狀態標志(讀、寫、添寫、同步和非阻塞等)
2)當前文件的偏移量
3)指向該文件v節點表項的指針
v節點表中包含了文件所有者、文件長度、文如逗件所在的設巧鍵備、指向文件實際數據塊在磁碟上所在位置的指針等等
下面給出一個例子:
#include <iostream>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
int fd = open("a.txt", O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd < 0)
{
printf("open a.txt failed, fd = %d\n", fd);
return -1;
}
printf("open a.txt success, fd = %d\n", fd);
fflush(stdout);
// 復制標准輸出的文件描述符
int nfd = p(STDOUT_FILENO);
int fileFd = p2(fd, STDOUT_FILENO);
if (fileFd < 0)
{
printf("p2 stdout_fileno failed, fileFd = %d\n", fileFd);
return -1;
}
printf("重定向標准輸出到a.txt, fileFd = %d\n", fileFd);
// 將STDOUT_FILENO復制到fd後,fd並沒有發生變化,依然可以通過它寫入到a.txt中
const char *pStr = "write string through fd\n";
write(fd, pStr, strlen(pStr));
fileFd = p2(nfd, fileFd);
if (fileFd < 0)
{
printf("p2 reback stdout_fileno failed\n");
return -1;
}
printf("print back to stdout standard, fileFd = %d\n", fileFd);
//孝橡巧 上面使用p2的時候,STDOUT_FILENO是存在並打開的,我們來測試下不存在的文件描述符的情況
fileFd = p2(fd, 20);
if (fileFd < 0)
{
printf("p2不存在的文件描述符失敗, fileFd = %d\n", fileFd);
}
else
{
printf("p2不存在的文件描述符成功, fileFd = %d\n", fileFd);
const char *pStr = "write string through fileFd\n";
write(fileFd, pStr, strlen(pStr));
}
close(nfd);
close(fileFd);
return 0;
}
文件指針是關鍵,標志兩個文件描述符是否一致,看文件指針是否一致即可 ,如果兩個或者多個文件描述符指向同一個文件表,那麼對他們的操作是對同一個文件進行操作
㈥ Linux系統中如何操作文件
Linux里主要有兩種文件操作方式:系統調用、ANSI C文件操作.
(1) Linux系統調用
一個非負整數,索引值,通常使用宏來表示。代表指向內核中每個進程打開文件的記錄表。
即底層操作。文件底層I/O操作的系統調用主要有open、close、read、write、lseek、ulink函數來直接操作文件。
其實ZLG那有很多的,你可以去看一下的。
㈦ 在linux系統中如何用open函數創建文件
Linux操作系統內核(kernel)利用文件描述符來訪問文件,文件描述符大於等於0,是一個用戶描述被打開文件的索引值,它指向該文件的相關信息記錄表,當文件打開或者創建新文件的時,就會返回一個文件描述符,當讀寫文件時,也需要使用文件描述符來指定特寫文件。
2、講解open函數
文件需要先打開或則創建
如果返回是-1, 則出錯,如果成功,則返迴文件描述符
第一個參數是文件路徑
第二個參數是flags
㈧ linux 中 open和fopen的區別
在 C 語言中,open()、read()、write()、close() 函數是對一個二進制文件(或者文本文件)進行的低級操作函數;而fopen()、fread()、fwrite()、fclose() 函數是對一個二進制文件(或者文本文件)進行的高級操作函數。具體的函數參數如何寫法,你可以參考 C 語言庫函數的相關文檔。通常情況下,如果要處理的數據比較大的話,低級操作肯定要比高級操作在速度上要快得多。
㈨ Linux有沒有文件夾的復制,移動,重命名函數
跟文件一樣。
cp命令用於復制文件或目錄,格式為:「cp [選項] 源文件 目標文件」。
想必您一定對復制操作不是很陌生的,在Linux系統中的復制操作其實具體還分為3種情況,第一種情況是如果目標文件是個目錄,則會將源文件復制到該目錄中,第二種情況是如果目標文件也是個普通文件,則會提示是否要覆蓋它,最後是第三種的情況了,如果目標文件是不存在的,則會將源文件修改成目標文件的名稱,類似於是重命名的操作。
參數
作用
-p
保留原始文件的屬性
-d
若對象為"鏈接文件",則保留該"鏈接文件"的屬性
-r
遞歸持續復制(用於目錄)
-i
若目標文件存在則詢問是否覆蓋
-a
相當於-pdr(p,d,r為上述的參數)
首先創建一個名為install.log的文件,然後將其復制出來一份名為x.log的備份文件:
[root@linuxprobe ~]# touch install.log
[root@linuxprobe ~]# cp install.log x.log
[root@linuxprobe ~]# ls
install.log x.log
mv命令用於移動文件或改名,格式為:「mv [選項] 源文件 [目標路徑|目標文件名]」。
剪切操作不同於復制操作,因為它會默認將源文件刪除掉,用戶就只有剪切後的文件了,並且如果對一個文件在同一個目錄中進行剪切操作,其實也是重命名的作用:
[root@linuxprobe ~]# mv x.log linux.log
rm命令用於刪除文件或目錄,格式為:「rm [選項] 文件」。
在Linux系統中刪除文件時會默認再向您詢問是否要執行刪除操作,如果不想總看到這種反復的確認信息,您可以使用「-f」參數來直接強制刪除,另外還要刪除於目錄文件夾的話,必需追加一個「-r」參數才可以,否則是刪除不掉的,例如咱們來嘗試刪除下剛剛那兩個文件吧:
[root@linuxprobe ~]# ls
install.log linux.log
[root@linuxprobe ~]# rm install.log
rm: remove regular empty file 『install.log』? y
[root@linuxprobe ~]# rm -rf linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#
可以看下http://www.linuxprobe.com/chapter-02.html