㈠ linux下用簡單c語言代碼怎麼實現實現文件夾所有內容的復制
||#include <sys/stat.h>
#include <unistd.h>
// 目錄
int isdir(char *path)
{
struct stat buf;
int cc;
cc=stat(path,&buf);
if(!cc && (buf.st_mode & S_IFDIR)) return(1);
return(cc);
}
// 可讀普通文件
int isrfile(char *path)
{
struct stat buf;
int cc;
int euid,egid;
cc=stat(path,&buf);
if(!cc) {
if((buf.st_mode & S_IFMT) != S_IFREG) return 0;
euid=geteuid();
egid=getegid();
if(euid==0) {
if(buf.st_mode & S_IRUSR || buf.st_mode & S_IRGRP ||
buf.st_mode & S_IROTH)
return 1;
else return 0;
}
if((buf.st_mode & S_IROTH)!=0) return 1;
if((buf.st_gid == egid) && ((buf.st_mode & S_IRGRP)!=0))
return 1;
if((buf.st_uid == euid) && ((buf.st_mode & S_IRUSR)!=0))
return 1;
}
return cc;
} 【江西新華】
㈡ 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
㈢ linux提供的拷貝函數
這句話表達得有問題,應該是 Linux 系統提供的文件拷貝命令是 cp。基本格式是:cp file1 file2
若想表達拷貝函數的話,那麼只能夠用於程序設計語言中,例如:字元串拷貝函數。
㈣ linux 為什麼要使用_to_user() _from_user()
_from_user(): 內核態可以訪問該地址的,否則為啥可以memcpy。只是說內核態訪問的時候,無法保證用戶態的地址(虛擬)有對應的物理地址映射。所以先做校驗,如果校驗地址成功,則做memcpy,否則只是做memset。這樣做的目的是防止內核態segement fault。否則問題就大了。
可以參考如下鏈接,我覺得講的不錯。
網頁鏈接
㈤ linux中,什麼函數可以讀取目錄
LINUX下歷遍目錄的方法一般是這樣的
打開目錄-》讀取-》關閉目錄
相關函數是
opendir -> readdir -> closedir
#include <dirent.h>
DIR *opendir(const char *dirname);
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
#include <dirent.h>
int closedir(DIR *dirp);
好了,三個函數都出來了呵呵,原型就是上面,給自己解釋一下免得以後我自己忘了呵呵!我以經忘過好幾回了,所以這次放上博客來
opendir用於打開目錄,是類似於流的那種方式,返回一個指向DIR結構體的指針他的參數*dirname是一個字元數組或者字元串常量,
readdir函數用於讀取目錄,他只有一個參數,這個參數主opendir返回的結構體指針,或者叫句柄更容易理解些吧。這個函數也返回一個結構體指針 dirent *
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 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) */
}
結構體中d_ino存放的是該文件的結點數目,什麼是結點數目呢我也說不清楚了呵呵,查一下其它資料了
d_off 是文件在目錄中的編移,具體是什麼意思我也不是很明白,我很少用到它,其本上就是用到d_name short d_reclen是這個文件的長度,需要注意的是這里的長度並不是指文件大小,因為大小和長度是2回事了,你可以用lseek將文件長度移得很長,但大小其實還是那麼大.最後一個元素就是我們要的了,文件名稱!
寫了一個實例:
/**
* 功能: Linux下C語言目錄歷遍 (讀取目錄)
* 作者: 小徐
* 郵箱: [email protected]
* QQ: 339534039
* 轉載請註明出處
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
void print_usage(void);
void print_usage(void)
{
printf("Usage: test dirname\n");
}
int main(int argc,char *argv[])
{
DIR * dp;
struct dirent *filename;
if (argc < 2)
{
print_usage();
exit(1);
}
dp = opendir(argv[1]);
if (!dp)
{
fprintf(stderr,"open directory error\n");
return 0;
}
while (filename=readdir(dp))
{
printf("filename:%-10s\td_info:%ld\t d_reclen:%us\n",
filename->d_name,filename->d_ino,filename->d_reclen);
}
closedir(dp);
return 0;
}
將上面代碼保存為readdir.c執行下面的命令進行編譯測試
[root@phpos ~]# gcc readdir.c
[root@phpos ~]# ./a.out
Usage: test dirname
[root@phpos ~]# ./a.out /etc/samba/
filename:lmhosts d_info:49296 d_reclen:24s
filename:smb.conf d_info:49825 d_reclen:24s
filename:smbpasswd d_info:49402 d_reclen:24s
filename:.. d_info:47906 d_reclen:16s
filename:secrets.tdb d_info:49812 d_reclen:24s
filename:. d_info:49295 d_reclen:16s
filename:smbusers d_info:49377 d_reclen:24s
[root@phpos ~]# ./a.out /var/
filename:preserve d_info:31971 d_reclen:24s
filename:lock d_info:31966 d_reclen:16s
filename:yp d_info:31976 d_reclen:16s
filename:empty d_info:31962 d_reclen:24s
filename:run d_info:31972 d_reclen:16s
filename:lib d_info:31939 d_reclen:16s
filename:nis d_info:31969 d_reclen:16s
filename:local d_info:31965 d_reclen:24s
filename:spool d_info:31973 d_reclen:24s
filename:tmp d_info:31941 d_reclen:16s
filename:opt d_info:31970 d_reclen:16s
filename:log d_info:31959 d_reclen:16s
filename:crash d_info:31997 d_reclen:24s
filename:.. d_info:2 d_reclen:16s
filename:account d_info:32037 d_reclen:24s
filename:mail d_info:31968 d_reclen:16s
filename:cache d_info:31960 d_reclen:24s
filename:db d_info:31961 d_reclen:16s
filename:. d_info:31938 d_reclen:16s
[root@phpos ~]#
程序正常執行!到此完了呵呵!!
㈥ 用linux下的c語言讀取txt文件中的列數據
1.用fgets函數可以讀取文件中某行的數據,某列數據就必須一個一個讀入每行的第回幾個字元,再存入到一答個字元串當中。
2.常式:
#include<stdio.h>
#include<string.h>
voidmain()
{
chara[100],b[100],c[100];
inti=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 ",i,a);
printf("第%d列數據:%s ",j,b);
fclose(fp);
}
㈦ 用linux下的c語言如何編寫保存文件函數
你的這抄個「保存文件」是什麼意思襲?或者說是在什麼情況下的?比如說:把信息輸入到已經打開的文件中(關閉不關閉文件),另外,有沒有緩沖區等?
最簡單的就是:打開一個文件(open函數),把要寫入的信息、數據通過write函數寫入文件中,然後再用close函數關閉文件。這種是適時性的,一般我們會有緩沖區(通過建立一個臨時文件或備份文件),即寫入文件中的信息並沒有直接寫入到原文件,而是寫入到緩沖區中,在應用程序中,如果我們確定要寫入原文件,可以通過一個命令來把緩沖區中的內容再真正寫入(可以用備份文件來替換原文件)到原文件中。