① 我要用c編寫程序讀寫磁碟,在linux中磁碟為文件,怎樣用c語言獲取磁碟的文件描述符,然後對磁碟進行讀寫
linux下面的概念是一切皆文件。所以沒有像c盤d盤這樣的東西,有的只是各種各樣的文件專夾和文件。要讀屬一個linux下面的文件很簡單,命令pwd可以得到當前路徑,然後路徑接上你打開的文件名就可以知道這個文件的詳細路徑了。直接open就可以了。
② linux下c語言 讀取文件內容
沒測試過,不過問題應該是fgetc這里
fgetc獲取到第一個字元,比如第一行的'#'號,然後fgets獲取到後面的字元,列印版當然就沒有權第一個字元了,解決方式要麼只用fgets,要麼把fgetc獲取的字元也列印出來
③ linux系統下,文件存儲與數據讀寫問題(C語言)。
如果是X86的操作系統,直接用整個結構體做memcpy就可以了,如果要考慮位元組對齊的問題可以嘗試這樣編碼,
PS:沒有調試過,僅僅提供思路哦
#include <stdio.h>
#include <string.h>
typedef struct User
{
int ID;
char Name[20];
int Score;
}tUser;
tUser stUser[4] = {
{1, "a", 60},
{2, "b", 70},
{3, "c", 80},
{4, "d", 90}
};
void MyWrite (int fd, tUser *pstUser, int iMemNum)
{
int i = 0, iLen = 0;
char szBuf[1024] = {0};
/*清空緩沖區*/
memset(szBuf, 0, 1024);
/*構造結構體存儲字元串*/
for (i = 0; i < iMemNum; i++) {
memcpy(szBuf+iLen, pstUser.ID, sizeof(int));
iLen += sizeof(int);
memcpy(szBuf+iLen, pstUser.Name, sizeof(char)*20);
iLen += sizeof(char)*20;
memcpy(szBuf+iLen, pstUser.Score, sizeof(int));
iLen += sizeof(int);
pstUser++;
}
//將szBuf的內容寫入fd 文件
}
void MyRead (int fd, tUser *pstUser)
{
int i = 0, iLen = 0, iStructSize = sizeof(int) + sizeof(char)*20 +sizeof(int);
char szBuf[1024] = {0};
char szTemBuf[32] = {0};
/*清空緩沖區*/
memset(szBuf, 0, 1024);
//從fd 文件中讀出內容到szBuf
iLen = strlen(szBuf);
i = 0;
/*構造結構體*/
while (iLen >= iStructSize) {
memcpy(szTemBuf, szBuf+i, sizeof(int));
szTemBuf[sizeof(int)] = 0;
pstUser.ID = atoi(szTemBuf);
i += sizeof(int);
memcpy(szTemBuf, szBuf+i, sizeof(char)*20);
szTemBuf[sizeof(char)*20] = 0;
strncpy(pstUser.Name, szTemBuf, 20);
i += sizeof(char)*20;
memcpy(szTemBuf, szBuf+i, sizeof(int));
szTemBuf[sizeof(int)] = 0;
pstUser.Score = atoi(szTemBuf);
i += sizeof(int);
iLen -= iStructSize;
pstUser++;
}
}
void MyFindByID(tUser *pstUser, int iMemNum, int iId)
{
int i = 0;
for (i = 0; i < iMemNum; i++) {
if (pstUser.ID == iId) {
printf("=============================\r\n");
printf("ID\t:%d\r\n", pstUser.ID);
printf("Name\t:%s\r\n", pstUser.Name);
printf("Score\t:%d\r\n", pstUser.Score);
printf("=============================\r\n");
return ;
}
pstUser++;
}
}
int main ()
{
FILE *file;
tUser stTmpUser[4];
file = fopen(path, "a");
if (file == NULL)
{
return -1;
}
MyWrite(file, &stUser[0], 4);
fclose(file);
file = fopen(path, "r");
if (file == NULL)
{
return -1;
}
MyRead(file, &stTmpUser[0]);
fclose(file);
MyFindByID(&stTmpUser[0], 4, 2);
return 0;
}
④ linux怎麼c語言讀取普通文件內容
1、用fgets函數復可以讀取文件中某制行的數據,某列數據就必須一個一個讀入每行的第幾個字元,再存入到一個字元串當中。
2、常式:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100],b[100],c[100];
int i=3,j=4,k=0; //第三行,第四列
FILE *fp = fopen("data.txt","r");
while(fgets(c,100,fp)){ //讀入每行數據
i--;
if(i==0) strcpy(a,c); //讀到第三行數據
b[k++]=c[j-1]; //把每行的那列字元拷到b中
}
b[k]=0;
printf("第%d行數據:%s\n",i,a);
printf("第%d列數據:%s\n",j,b);
fclose(fp);
⑤ Linux C 緩沖文件和非緩沖文件讀寫方式用法
1.用write, read, open等系統調用編寫分別實現如下功能的程序(要求進行必要的出錯檢查版):
(1)創建一個權文件testfile.txt,文件內容從鍵盤輸入;
(2)將testfile.txt的內容顯示在屏幕上,並將testfile.txt的內容復制到一個新的文件file2.txt中。
實驗代碼:
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
⑥ linux下如何用C程序讀寫本地文件
是一樣來的。如果是同目自錄則直接寫文件名,如果是不同的目錄,可以寫明路徑。
如:
讀同目錄文件local.txt
fopen("local.txt","r");
讀不同目錄文件 /home/yourname/otherdir/other.txt
fopen("/home/yourname/otherdir/other.txt","r");
你可以使用pwd命令來獲得文件路徑
⑦ Linux編程,怎樣用C語言創建、讀、寫文件呀希望各位賜教!謝謝
既然得到了這文件指針,你想怎麼打開都行,無需知道以前是什麼模式。
用open更新你想要的打開方式。
o_rdonly
以只讀方式打開文件
o_wronly
以只寫方式打開文件
o_rdwr
以可讀寫方式打開文件。上述三種旗標是互斥的,
也就是不可同時使用,
但可與下列的旗標利用or(|)運算符組合。
o_creat
若欲打開的文件不存在則自動建立該文件。
o_excl
如果o_creat
也被設置,
此指令會去檢查文件是否存在。文件若不存在則建立該文件,
否則將導致打開文件錯誤。此外,
若o_creat與o_excl同時設置,
並且欲打開的文件為符號連接,
則會打開文件失敗。
o_noctty
如果欲打開的文件為終端機設備時,
則不會將該終端機當成進程式控制制終端機。
o_trunc
若文件存在並且以可寫的方式打開時,
此旗標會令文件長度清為0,
而原來存於該文件的資料也會消失。
o_append
當讀寫文件時會從文件尾開始移動,
也就是所寫入的數據會以附加的方式加入到文件後面。
o_nonblock
以不可阻斷的方式打開文件,
也就是無論有無數據讀取或等待,
都會立即返回進程之中。
o_ndelay
同o_nonblock。
o_sync
以同步的方式打開文件。
o_nofollow
如果參數pathname
所指的文件為一符號連接,
則會令打開文件失敗。
o_directory
如果參數pathname
所指的文件並非為一目錄,
則會令打開文件失敗。
這是你要的
r
打開只讀文件,
該文件必須存在。
r+
打開可讀寫的文件,
該文件必須存在。
w
打開只寫文件,
若文件存在則文件長度清為0,
即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,
若文件存在則文件長度清為零,
即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,
則會建立該文件,
如果文件存在,
寫入的數據會被加到文件尾,
即文件原先的內容會被保留。
a+
以附加方式打開可讀寫的文件。若文件不存在,
則會建立該文件,
如果文件存在,
寫入的數據會被加到文件尾後,
即文件原先的內容會被保留。
⑧ LINUX C語言寫一個讀寫文件的程序,讀取的話,要把文件內容顯示出來,寫的話,就是寫進文件裡面咯
#include<stdio.h>
#include<stdlib.h>
intmain()
{
FILE*pf=fopen("a.txt","r");
if(pf==NULL){
printf("opena.txtfilefailed! ");
exit(0);
}
FILE*pf2=fopen("b.txt","w");
if(pf2==NULL){
printf("openb.txtfilefailed! ");
fclose(pf);
exit(0);
}
charch;
while(!feof(pf)){
ch=fgetc(pf);
putchar(ch);
fputc(ch,pf2);
}
fclose(pf2);
fclose(pf);
return0;
}
⑨ linux系統如何讀寫屬性為c的文件
Linux把外部設備也當成文件來管理,這是繼承了Unix一切皆文件的設計思想。
/dev目錄內下的文件皆外部設備,所以你必須容有相應的內核模塊來驅動相應的設備,否則此設備無法讀寫。
你是在測試COM口么?COM口有沒有連接測試設備?沒有的話,就算有相應的內核模塊也是白搭的,就象光有電燈開關,沒安裝燈泡,你怎麼按開關都白搭。
⑩ Linux編程,怎樣用C語言創建、讀、寫文件呀希望各位賜教!謝謝
樓上正解,提供一小抄例子如下,另外,linux 下C讀寫文件函數有兩種,一個是系統的,還有一個是C函數庫的記得,好像是系統的文件句柄(file id)比較簡單,然後函數庫的那個提供了一個結構體,具體的記不請了....好長時間沒寫...
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fid;
char buff[4096];
fid = open(argv[1],O_WRONLY);
if (fid==-1)
{
perror(argv[1]);
exit(1);
}
while (fgets(buff,4096,stdin)!=NULL)
{
write(fid,buff,strlen(buff));
}
close(fid);
}