/*-樓主可以參考一下我寫的這段程序---------*/
/*-----用stat函數得到文件信息,並用函數轉化為文本輸出,就跟ls命令一樣-----*/
/*----------注釋我寫得很詳細,望採納-----------*/
#include <sys/types.h> /*-----這三個頭文件一定要有-*/
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void mode_to_letter(int mode,char *str)
{
/*-------這個函數用來把模式值轉化為字元串------*/
str[0]='-'; /*------這里的S_*****都是宏定義,用來判斷模式屬性-*/
if(S_ISDIR(mode)) str[0]='d';/*-文件夾-*/
if(S_ISCHR(mode)) str[0]='c';/*-字元設備-*/
if(S_ISBLK(mode)) str[0]='b';/*-塊設備-*/
if(mode & S_IRUSR) str[1]='r';/*--用戶的三個屬性-*/
else str[1]='-';
if(mode & S_IWUSR) str[2]='w';
else str[2]='-';
if(mode & S_IXUSR) str[3]='x';
else str[3]='-';
if(mode & S_IRGRP) str[4]='r';/*--組的三個屬性-*/
else str[4]='-';
if(mode & S_IWGRP) str[5]='w';
else str[5]='-';
if(mode & S_IXGRP) str[6]='x';
else str[6]='-';
if(mode & S_IROTH) str[7]='r';/*-其他人的三個屬性-*/
else str[7]='-';
if(mode & S_IWOTH) str[8]='w';
else str[8]='-';
if(mode & S_IXOTH) str[9]='x';
else str[9]='-';
str[10]='\0';
}
int main(int argc,char *argv[])
{
struct stat sb;/*- 定義stat結構--*/
char str[12];
if(argc!=2){
fprintf(stderr,"Usage: %s <pathname>\n",argv[0]);
exit(EXIT_FAILURE);
}
if(stat(argv[1],&sb)==-1){/*-stat函數,詳情請 man 2 stat 查看 -*/
perror("stat");
exit(EXIT_FAILURE);
}
printf("Mode:%lo(octal)\n",(unsigned long)sb.st_mode);
mode_to_letter(sb.st_mode,str);
printf("Mode:%s\n",str);
return 0;
}
❷ LINUX下C語言實現文件名檢索
LINUX下C語言通過文件名檢索創建多個文件,實現文件名有規律的變化test1,test2...這種功能,方法如下:
DIR*opendir(constchar*filename);
structdirent*readdir(DIR*dirp);
//利用這兩個函數獲取要建立文件的目錄
while((psDirent=readdir(pdir))!=NULL)
{
//readdir返回的是目錄下的名稱,然後判斷一下當前這個名字是子目錄還是文件
structstatst;
stat(pcFileName,&st);
if(S_ISDIR(st.st_mode))
continue;//是目錄繼續循環
else
filecount++;//是文件就加1
}
//通過while循環創建文件名為文件(filecount+1)的文件。
❸ Linux 下調用C的庫函數stat,返回errno=75然後調用strerror(errno)= 7287475, 請問上述錯誤碼代表什麼錯誤
errno = 75
返回 」75「 代表的錯誤是:值已經大於了定義的數據類型
❹ 如何用C語言獲取文件的大小
intfile_size(char*filename)
{
FILE*fp=fopen(filename,"r");
if(!fp)return-1;
fseek(fp,0L,SEEK_END);
intsize=ftell(fp);
fclose(fp);
returnsize;
}
(4)linuxcstat函數擴展閱讀
C語言復獲取文件長度制及全部內容
FILE*fp;
fp=fopen("localfile","rb");//localfile文件名
fseek(fp,0L,SEEK_END);/*定位到文件末尾*/
flen=ftell(fp);/*得到文件大小*/
p=(char*)malloc(flen+1);/*根據文件大小動態分配內存空間*/
if(p==NULL)
{
fclose(fp);
return0;
}
fseek(fp,0L,SEEK_SET);/*定位到文件開頭*/
fread(p,flen,1,fp);/*一次性讀取全部文件內容*/
p[flen]=0;/*字元串結束標志*/
❺ linux c語言如何快速知道函數的頭文件
1、要用到unistd.h頭文件。
2、Write函數用法:write函數所在的頭文件為 <unistd.h>write有兩種用法。一種是:ssize_twrite(int handle, void *buf, int nbyte);handle 是文件描述符;buf是指定的緩沖區,即指針,指向一段內存單元;nbyte是要寫入文件指定的位元組數;返回值:寫入文檔的位元組數(成功);-1(出錯)write函數把buf中nbyte寫入文件描述符handle所指的文檔,成功時返回寫的位元組數,錯誤時返回-1.另一種是:write(const char* str,int n)str是字元指針或字元數組,用來存放一個字元串。n是int型數,它用來表示輸出顯示字元串中字元的個數。write("string",strlen("string");表示輸出字元串常量3、程序示例:
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sysstat.h>
#include<io.h>
#include<string.h>
intmain(void)
{
int*handle;charstring[40];
intlength,res;/*Createafilenamed"TEST.$$$".If"TEST.$$$"alreadyexists,itwillbeoverwritten.*/
if((handle=open("TEST.$$$",O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE))==-1)
{
printf("Erroropeningfile. ");
exit(1);
}
strcpy(string,"Hello,world! ");
length=strlen(string);
if((res=write(handle,string,length))!=length)
{
printf("Errorwritingtothefile. ");
exit(1);
}
printf("Wrote%dbytestothefile. ",res);
close(handle);return0;}
❻ linux c用什麼函數創建文件夾
Linux c語言可以使用系統提供的mkdir函數來創建文件夾。
1、函數原型
int mkdir(const char *path, mode_t mode);
2、參數說明:回
path是目錄名
mode是目錄許可權
3、需要答頭文件
#include<sys/stat.h>
4、示例
js">//添加mkdir函數聲明頭文件
#include<sys/stat.h>
#include<sys/types.h>
intmain()//主函數
{
//直接調用mkdir函數
//建立一個名為的文件夾
//許可權為0777,即擁有者許可權為讀、寫、執行
//擁有者所在組的許可權為讀、寫、執行
//其它用戶的許可權為讀、寫、執行
mkdir("",0777);
return0;
}
說明:函數調用試圖建立777許可權的文件夾,但是在實際程序執行時,還需要考慮umask值,最終才會得到實際的許可權。
5、執行效果如下圖所示
說明:t.c是源碼文件,有gcc進行編譯,-o是gcc的參數,有於指明編譯後輸出的文件,t為源碼經gcc編譯後生成的可執行文件。./t是執行當前目錄下的生成的可執行文件t。
❼ stat是什麼
最佳答案檢舉 硬碟介面的一種,是一種標准
有關於各種SATA標準的術語目前看起來就是一團迷霧。Serial ATA Working Group受命建立和發展Serial ATA規范,現在已經改名為SATA-IO(SATA International Organization,SATA國際組織)了,其在官方站點(www.searialata.org)上進行澄清,SATA II不是SATA 3Gb/s的名字而是一個制定SATA規范的組織/團隊的名字,3Gb/s僅僅是SATA II組織制定的各種特性之一——這個也是混亂的根源。SATA的真正標准,按照SATA-IO目前的做法應該是Serial ATA版本、加上傳輸界面傳輸速度、再加上擴展特性而成,目前是Serial ATA 1.0a、1.5Gb/s和3.0Gb/s、以及Extensions to Serial ATA 1.0a, Revision 1.2。
SATA組織/團隊(就是SATA-IO)完成Serial ATA 1.0a規范之後,SATA II組織/團隊(事實上也是SATA-IO)便進行對Serial ATA 1.0a進行擴展,得到的結果,就是Extensions to Serial ATA 1.0a, Revision 1.2(當前版本),這些擴展大大增強了SATA的能力。Extensions to Serial ATA 1.0a,可以稱之為SATA1.0a擴展,包含了一系列的規格,這些附加的屬性和能力被定義為可選的,原意是讓廠商/客戶可以根據實際市場的需要進行部署。這樣市面上千奇百怪的控制器/硬碟具有不同的特性就不足為奇了。
Serial ATA 1.0a規范裡面並沒有對界面傳輸速率進行規定,事實上,Extensions to Serial ATA 1.0a, Revision 1.2也沒有。界面傳輸速率於它們是無關的。按照傳輸信號來劃分,SATA 150MB/s也就是SATA 1.5Gb/s屬於Serial ATA Generation-1 Signaling Rate(第一代SATA速率),SATA 300MB/s也就是SATA 3Gb/s則屬於Serial ATA Generation-2 Signaling Rate,未來的SATA 600MB/s—SATA 6Gb/s則屬於Serial ATA Generation-3 Signaling Rate,去掉「Signaling Rate」、剩下Serial ATA Generation-1這樣的表述也可以使用。
說完這些官方的SATA標准,就不能不提到Intel(聯合多個廠商)提出的AHCI(Advanced Host Controller Interface,高級主機控制器界面)。AHCI相當於在控制器方進行的對SATA1.0a擴展的一種重定義,它支持一系列的SATA1.0a擴展屬性,當然,AHCI包含的這些SATA1.0a擴展屬性跟SATA硬碟的SATA1.0a擴展屬性不一定是一致的。AHCI定義了與SATA設備通訊的一個界面,與原始的基於Port方式的與SATA設備通信的方式不同,AHCI提供的是基於系統內存的通信方式,這一點看起來就跟傳統的DMA(Direct Memory Access)方式類似:ACHI控制器直接將數據讀出或者存儲到內存,軟體無需看到(也看不到)I/O Port,所要發送的指令就簡單多了,也節約了CPU資源。
在將界面重新定義的過程中,AHCI實現了如NCQ、Hot Plug(熱插拔)這樣的功能。AHCI規范目前的版本為1.1。
最後,ACHI也沒有對界面傳輸速率進行規定,所以就出現了屬於SATA 1.5Gb/s(Serial ATA Generation-1)的ICH6R支持AHCI,屬於SATA 3Gb/s(Serial ATA Generation-2)的ICH7R也支持AHCI的情形。理論上講新標準是可以向下兼容的,不過是降速使用了,也就是說你用SATA2的硬碟在SATA上使用時,其傳輸速率是運行在150上的。
❽ linux C語言,stat 是哪(幾)個詞語的縮寫
1樓別誤導人,statue是什麼啊,雕像,雕像和C語言有什麼關系
樓主說的stat應該是指stat函數或者sys/stat.h頭文件吧
在man stat裡面,解釋是
stat - display file or file system status
所以stat應該就是status的縮寫而已
❾ C語言 stat()函數獲得文件大小需不需要打開文件就是stat()函數是怎麼獲得文件的大小的
stat函數不需要,只要文件名就行(你的文件在當前路徑下,要不還需將路徑名加專上)屬,int state(const char * path,struct stat *buf);這是函數原型。在struct state這個結構體中有個st_size這個變數,他就是文件大小的變數。具體你可以查一下man手冊。與它類似的還有一個fstat,他需要open文件得到文件描述符。
❿ c語言如何通過文件屬性獲取文件大小
c語言可以通過stat()函數獲得文件畢前屬性,通吵數仔過返回的文件屬性,從中獲取文件大小。
#include
<sys/stat.h>
可見以下結構體和函數
struct
stat
{
_dev_t
st_dev;
_ino_t
st_ino;
unsigned
short
st_mode;
short
st_nlink;
short
st_uid;
short
st_gid;
_dev_t
st_rdev;
_off_t
st_size;
//文件大小
time_t
st_atime;
time_t
st_mtime;
time_t
st_ctime;
};
stat(const
char
*,
struct
_stat
*);
//根據文件名得到文件屬性
參考代碼:
#include <sys/升汪stat.h>
void main( )
{
struct stat buf ;
if ( stat( "test.txt", &buf ) < 0 )
{
perror( "stat" );
return ;
}
printf("file size:%d\n", buf.st_size );
}