`
darren_nizna
  • 浏览: 72612 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

linux下读取日志文件上传到服务器

阅读更多

日志文件会不断的增加,这个程序能上传这不断增加的日志文件到服务器,以便服务器分析。

#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/sendfile.h>

#define SA struct sockaddr

/**
 *  如果出现错误,程序返回 0, 错误信息保存在 error 数组中
 *  server       服务端的 IP, 字符串表示 如 “192.168.1.1”
 *  port         连接服务端的端口,一个 16 位整数
 *  logFilePath  客户端日志文件的位置
 *  error        程序出错将错误信息返回在这个数组中
 */
int transportLogFileToServer( char* server,   int port,  char* logFilePath, char error[100] ){
    int 		         info;      /* 临时变量  */
    int 			 sockfd;    /* socket 描述符 */
    struct sockaddr_in           servaddr;  /* 套接字  */

    /* 初始化错误信息 */
    strcpy( error, "Everything is ok!!" );

    /* 获得 socket 描述符 */
    sockfd= socket( AF_INET, SOCK_STREAM, 0 );
    if( sockfd== -1 ){
        strcpy( error, "Get socket descriptor error, connect again!" );
        return 0;
    }

    /* 初始化 socket 为零 */
    bzero( &servaddr, sizeof(servaddr) );
    /* 设置协议 */
    servaddr.sin_family = AF_INET;
    /* 设置端口 */
    servaddr.sin_port =  htons( port );

    /* 设置服务端 IP */
    info= inet_pton( AF_INET,  server, &servaddr.sin_addr );
    if( info== -1 ){
        strcpy( error, "The ip address format is error!");
        return 0;
    }

    /* 连接服务端 */
    info= connect( sockfd, (SA*)&servaddr, sizeof(servaddr) ) ;
    if( info== -1 ){
        strcpy( error, "Connect server error, check the server address or port!");
        return 0;
    }

    /* 打开日志文件 */
    FILE* file= fopen( logFilePath, "r");

    if( file== NULL ){
        strcpy( error, "Can't open the log file, please check the path or if you have the right to read!");
        return 0;
    }
    /* 获得日志文件的文件描述符 */
    int fd= fileno( file );

    /* 文件指针指向文件末尾,便于得到文件长度 */
    fseek( file, 0, SEEK_END );
    /* 初始化 pre 为文件长度 */
    long pre= ftell( file );
    long now= 0;

    while( 1 ){
        fseek( file, 0, SEEK_END );
        now= ftell( file );

	/* 如果 now> pre, 说明日志文件已经写入了数据 */
        if( pre== now ) continue;

	/* 将文件指针指向 pre 位置 */
        fseek( file, pre, SEEK_SET );

	/* 将 pre 到 now 这一段的数据发送 */
        sendfile( sockfd, fd, &pre, now- pre );

        pre= now;
    }

    return 1;
}

int main(){
    char error[1000];
    int t= transportLogFileToServer( "10.2.53.119",  4464, "./testFile.txt", error );

    if( t== 0 ){
        printf("%s\n",error );
    }
	return 0;
}
 
2
1
分享到:
评论

相关推荐

    SFTP定时扫描本地文件上传到Linux服务器

    8. **权限和安全性**:在上传文件到Linux服务器时,需要考虑文件的权限设置,确保上传后的文件权限符合服务器的安全策略。 综上所述,这个项目涉及了多个IT领域的知识,包括网络协议、文件系统操作、Java编程、...

    基于linux下服务器与客户端传文件

    8. **权限管理**:在Linux中,文件和目录都有所有权和权限设置,这影响到文件能否被传输、读取、写入或执行。了解`chown`、`chgrp`和`chmod`命令对于控制文件访问至关重要。 9. **日志记录**:在测试环境中,记录...

    Linux下文件上传

    在Linux操作系统中,文件上传是日常操作的一部分,无论是开发者共享代码、系统管理员传输日志,还是用户分享文档,都需要熟练掌握文件上传技能。本篇主要介绍Linux环境下的文件上传方式,以及与之相关的编程概念。 ...

    linux下的日志处理

    这些信息默认会显示在终端上,但在实际应用中,我们通常会重定向到文件或管道中,以便于日后的查看和分析。 其次,Linux的syslog服务是系统级别的日志收集和分发机制。通过调用`openlog`、`syslog`和`closelog`函数...

    日志文件源代码(C语言)

    本篇将围绕"日志文件源代码(C语言)"这个主题,深入探讨C语言在Linux环境下如何实现日志管理,并结合提供的文件`yllog.c`和`yllog.h`进行分析。 首先,日志文件主要分为两种类型:事件日志和消息日志。事件日志...

    如何建立LINUX日志管理服务器.pdf

    通过目的端口514,将所有路由器的日志管理配置发送到安装了Syslog软件的服务器,Syslog服务器自动接收日志数据并写入日志文件中,存储外部路由器日志的日志文件通常存放在该服务器的“/var/log”目录下的messages...

    实时打印 linux 服务器日志项目

    1. **设置服务器**:创建一个服务器端程序,定期读取目标日志文件(可能使用`tail -f`或更底层的文件I/O操作),并在检测到新内容时,通过WebSocket接口发送更新。 2. **建立WebSocket连接**:在客户端(例如网页)...

    linux 下web服务器每天生成日志的shell脚本

    通过编写和使用shell脚本,我们可以实现Linux环境下Web服务器日志的自动化管理,包括日志生成、归档、切割、分析和安全控制。结合`cron`和`logrotate`工具,可以实现高效的日志维护流程,同时确保日志数据的安全性和...

    LInux php上传文件代码

    在Linux环境中,使用PHP进行文件上传是...以上就是关于“Linux PHP上传文件代码”的核心知识点,涵盖了从客户端到服务器端的整个文件上传过程,以及相关的安全措施。在实际应用中,还需要根据具体需求进行定制和优化。

    ufsxpci软件Windows读取Linux XFS外接硬盘,用于Windows操作系统读取NAS等硬盘

    XFS是Linux下广泛使用的高性能日志文件系统,而在Windows系统中默认并不支持直接读取这种格式的磁盘。 首先,我们要理解XFS文件系统的特性。XFS是为大型数据集和高I/O负载设计的,它提供了快速的文件创建、删除和...

    Linux批量scp命令执行工具 可批量对多个Linux主机执行传输文件命令 方便省力 适合统一化管理Linux服务器

    总的来说,Linux批量scp命令执行工具是Linux服务器管理员的得力助手,它简化了多主机文件传输的过程,提高了工作效率,同时也降低了出错的可能性。对于那些管理着众多Linux服务器的人来说,掌握并合理运用这样的工具...

    linux下c实现单线程web服务器

    `mylog.c`实现了日志系统,它会将服务器的活动信息,如接收的请求、错误信息等,写入到指定的日志文件中。日志记录是任何服务监控和故障排查的重要工具,通过定制化的日志格式,可以方便地追踪和分析服务器的行为。 ...

    Python-基于python实现的linux后台日志监控小项目

    5. **线程与并发**:为了确保监控的实时性和系统的响应速度,项目可能使用多线程或多进程来处理不同的任务,如读取日志、解析日志和发送通知等。Python的`threading`或`multiprocessing`模块可以实现这些功能。 6. ...

    Qt实现简单的qDebug输出到日志文件

    为了应对这种情况,开发者可以考虑将资源上传到多个平台,或者使用自己的服务器或云存储服务来分发文件,并调整积分策略以鼓励合理的访问和分享。 总结来说,通过自定义日志处理器并重定向`qDebug()`输出,我们可以...

    VB6取LINUX文件

    - 连接成功后,使用SFTP会话,你可以列出目录、读取文件、下载文件,甚至上传文件到Linux服务器。 3. **Web服务(RESTful API)**: - 如果你有权限在Linux服务器上部署Web服务,可以创建一个简单的RESTful API来...

    Linux下面日志代码

    在Linux环境下,通常有多种方式来处理和记录日志,如使用内置的日志系统syslog、自定义脚本或第三方库。以下是对这个主题的详细阐述: 1. **syslog服务** - **syslog介绍**:syslog是Linux中的标准日志系统,它...

    Linux audit 日志审计服务安装及使用

    Linux audit 是一种强大的日志审计服务,可以将审计记录写入日志文件,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞。本文将详细介绍 Linux audit 的安装和使用方法。 安装 Linux ...

    web页面读取后台日志

    总之,"web页面读取后台日志"这一功能涉及到的技术点包括:WebSocket协议、Linux日志系统、服务器端日志监听、前端JavaScript WebSocket API、以及使用Maven进行项目管理和依赖管理。通过这些技术的组合应用,我们...

    Linux下文件传输实现全过程c语言

    该函数用于将缓冲区中的数据写入到文件描述符所对应的文件中,确保所有数据都被完整写入。具体实现如下: - **参数**: - `int fd`:目标文件描述符。 - `const void *vptr`:指向缓冲区的指针。 - `size_t n`:...

Global site tag (gtag.js) - Google Analytics