导航:首页 > 文件类型 > linux文件拷贝函数

linux文件拷贝函数

发布时间:2023-08-04 21:59:50

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函数关闭文件。这种是适时性的,一般我们会有缓冲区(通过建立一个临时文件或备份文件),即写入文件中的信息并没有直接写入到原文件,而是写入到缓冲区中,在应用程序中,如果我们确定要写入原文件,可以通过一个命令来把缓冲区中的内容再真正写入(可以用备份文件来替换原文件)到原文件中。

阅读全文

与linux文件拷贝函数相关的资料

热点内容
如何更改文件编辑器 浏览:91
怎么把图片以图片形式放进文件夹 浏览:833
asp淘宝网站源码 浏览:318
怎么给文件夹换个显示图片 浏览:932
程序员考试河南 浏览:284
苹果手机数据信号模块坏了多少钱 浏览:657
dreamweaver文件夹 浏览:434
苹果照片尺寸是多少 浏览:164
winhex中文版高级教程注册码 浏览:738
spring上传多个文件 浏览:431
无限次输入苹果密码 浏览:787
novamind教程 浏览:481
华为手机怎么推送升级 浏览:286
苹果app在桌面消失怎么找回来 浏览:817
smi文件手机怎么用 浏览:222
为什么膜拜单车app闪退 浏览:994
十堰编程在哪里学 浏览:383
论文所需的数据要从哪里找 浏览:461
可以添加直播源的网络电视软件 浏览:57
文件夹pdf文件 浏览:562

友情链接