1.搭建nextcloud私有云存储网盘的源码教程详解
2.源码详解系列(八)--全面讲解HikariCP的使用和源码
3..cp是什么意思?
4.[转]Megatron-LM源码系列(八): Context Parallel并行
5.linuxä¸cpå½ä»¤å¦ä½ç¨ Cè¯è¨å®ç°
搭建nextcloud私有云存储网盘的教程详解
Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的百度云同步网盘,从而实现跨平台跨设备文件同步、网盘共享、源码版本控制、百度sipdroid 源码下载团队协作等功能。网盘跟庄宝典指标源码它的源码客户端覆盖了Windows、Mac、百度Android、网盘iOS、源码Linux 等各种平台,百度也提供了网页端以及 WebDAV接口,网盘所以你几乎可以在各种设备上方便地访问你的源码传奇国外版源码云盘。
简介:
搭建个人云存储一般会想到ownCloud,百度堪称是网盘自建云存储服务的经典。而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储.
真正试用过后就由衷地赞同这个Nextcloud:它是个人云存储服务的绝佳选择。一开始以为Nextcloud只是智能seo系统源码一个网盘云存储,后来看到
Nextcloud内置了Office文档、相册、日历联系人、两步验证、DLL防提取源码文件管理、RSS阅读等丰富的应用,我发现Nextcloud已经仅仅可以
用作个人或者团队存储与共享,还可以打造成为一个个人办公平台,几乎相当于一个个人的Dropbox了。Nextcloud运行环境与平常我们
常用的程序差不多,LAMP是官方首选,不过LNMP也照样可以运行,只不过需要自己写URL重写规则。当然,官方还提供了SNAP一键安装包
注:以上来自网上某处,重点是下面的安装
本篇采用rpm源码安装,本人亲测有效,在线或一键安装没难度,请自行百度,
1.安装LAMP架构:
注:为了避免权限,网络问题等请用root用户或较高级别账号登录再操作
yum install -y tl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#define BUF_SIZE
#define PATH_LEN
void my_err(char *err_string, int line )
{
fprintf(stderr,"line:%d ",line);
perror(err_string);
exit(1);
}
void copy_data(const int frd,const int fwd)
{
int read_len = 0, write_len = 0;
unsigned char buf[BUF_SIZE], *p_buf;
while ( (read_len = read(frd,buf,BUF_SIZE)) ) {
if (-1 == read_len) {
my_err("Read error", __LINE__);
}
else if (read_len > 0) { //æ读åé¨ååå ¥ç®æ æ件
p_buf = buf;
while ( (write_len = write(fwd,p_buf,read_len)) ) {
if(write_len == read_len) {
break;
}
else if (write_len > 0) { //åªåå ¥é¨å
p_buf += write_len;
read_len -= write_len;
}
else if(-1 == write_len) {
my_err("Write error", __LINE__);
}
}
if (-1 == write_len) break;
}
}
}
int main(int argc, char **argv)
{
int frd, fwd; //读åæ件æ述符
int len = 0;
char *pSrc, *pDes; //åå«æåæºæ件路å¾åç®æ æ件路å¾
struct stat src_st,des_st;
if (argc < 3) {
printf("ç¨æ³ ./MyCp <æºæ件路å¾> <ç®æ æ件路å¾>\n");
my_err("arguments error ", __LINE__);
}
frd = open(argv[1],O_RDONLY);
if (frd == -1) {
my_err("Can not opne file", __LINE__);
}
if (fstat(frd,&src_st) == -1) {
my_err("stat error",__LINE__);
}
/*æ£æ¥æºæ件路å¾æ¯å¦æ¯ç®å½*/
if (S_ISDIR(src_st.st_mode)) {
my_err("ç¥è¿ç®å½",__LINE__);
}
pDes = argv[2];
stat(argv[2],&des_st);
if (S_ISDIR(des_st.st_mode)) { //ç®æ è·¯å¾æ¯ç®å½ï¼å使ç¨æºæ件çæ件å
len = strlen(argv[1]);
pSrc = argv[1] + (len-1); //æåæåä¸ä¸ªå符
/*å æ¾åºæºæ件çæ件å*/
while (pSrc >= argv[1] && *pSrc != '/') {
pSrc--;
}
pSrc++;//æåæºæ件å
len = strlen(argv[2]);
// . 表示å¤å¶å°å½åå·¥ä½ç®å½
if (1 == len && '.' == *(argv[2])) {
len = 0; //没æç³è¯·ç©ºé´ï¼åé¢å°±ä¸ç¨éæ¾
pDes = pSrc;
}
else { //å¤å¶å°æç®å½ä¸ï¼ä½¿ç¨æºæ件å
pDes = (char *)malloc(sizeof(char)*PATH_LEN);
if (NULL == pDes) {
my_err("malloc error ", __LINE__);
}
strcpy(pDes,argv[2]);
if ( *(pDes+(len-1)) != '/' ) { //ç®å½ç¼ºå°æåç'/'ï¼åè¡¥ä¸â/â
strcat(pDes,"/");
}
strcat(pDes+len,pSrc);
}
}
/* æå¼ç®æ æä»¶ï¼ ä½¿æéä¸æºæ件ç¸å*/
fwd = open(pDes,O_WRONLY | O_CREAT | O_TRUNC,src_st.st_mode);
if (fwd == -1) {
my_err("Can not creat file", __LINE__);
}
copy_data(frd,fwd);
//puts("end of copy");
if (len > 0 && pDes != NULL)
free(pDes);
close(frd);
close(fwd);
return 0;
}