xunwap

专注移动互联网服务

正在浏览 代码片段 里的文章

Linux Shell 读取并操作文件模板

下面是Linux下使用Shell来读取并操作文件内容的模板,每次从文件中读取一行。

#!/bin/sh


while read LINE

do

# here you can operate the content through ‘$LINE’

done < file

# 说明:
LINE 存储每次从文件中所读取的一行
file 所读取的文件名

例如我们每次从文件”file.txt”中读取一行并显示:

#!/bin/sh

while read LINE

do

echo $LINE

done < “file.txt”

本站原创文章,转载请注明出处。

在开发的过程中,我们通常需要在代码中动态创建指定的目录,如果其父目录不存在,那么我们需要递归地创建其父目录,这一点类似于Linux中”mkdir -p xxx”的功能。下面提供一个实现此功能的函数。

说明: 由于wordpress的页面排版的自动折行,所以代码看起来格式不够工整,大家直接复制粘贴到.cpp文件中察看格式就非常工整。

#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>

//! @brief 生成目录
/*!
 	以指定的权限创建目录.
 	对于指定要创建的目录,如果其父目录不存在(递归至要生成的目标上报的根目录),那么会创建其对应的父目录
 	例如,指定要创建的目录: "/foo/bar",如果/foo/目录不存在,那么在创建 bar 目录之前会创建 /foo 目录
 	对于要生成的目标目录,"./foo/bar" 等价于 "foo/bar"
 	@param szDirectoryPath 要创建的目录的路径
 	@param iDirPermission 创建目录时,为所创建的目录所指定的权限
 	@return 如果创建成功,返回<b>true</b>;如果创建失败,返回<b>false</b>.
 */
static bool CreateDirectory( const char *szDirectoryPath , int iDirPermission = 0744 )
{
    if ( NULL == szDirectoryPath )
    {
#ifdef DEBUG
        fprintf( stderr , "[%s][%d][%s][parameter < szDirectoryPath > for < CreateDirectory > should not be NULL]\n" , \
                 __FILE__ , __LINE__ , __FUNCTION__ );
#endif

        return false;
    }

    const int iPathLength = static_cast< int >( strlen( szDirectoryPath ) );
    if ( iPathLength > PATH_MAX )
    {
#ifdef DEBUG
        fprintf( stderr , "[%s][%d][%s][the path length(%d) exceeds system max path length(%d)]\n" , \
                 __FILE__ , __LINE__ , __FUNCTION__ , iPathLength , PATH_MAX );
#endif

        return false;
    }

    char szPathBuffer[ PATH_MAX ] = { 0 };
    memcpy( szPathBuffer , szDirectoryPath , iPathLength );

    for ( int i = 0 ; i < iPathLength ; ++i )
    {
        char &refChar = szPathBuffer[ i ];

        //目录分隔符
        if ( ( '/' == refChar ) && ( 0 != i ) )
        {
            refChar = '\0';

            //判断当前目录是否存在
            int iStatus = access( szPathBuffer , F_OK );

            if ( 0 != iStatus )
            {
                if ( ( ENOTDIR == errno ) || ( ENOENT == errno ) )
                {
                    //以指定权限创建目录
                    iStatus = mkdir( szPathBuffer , iDirPermission );
                    if ( 0 != iStatus )
                    {
#ifdef DEBUG
                        fprintf( stderr , "[%s][%d][%s][< mkdir > fail , ErrCode:%d , ErrMsg:%s]\n" , \
                                 __FILE__ , __LINE__ , __FUNCTION__ , errno , strerror( errno ) );
#endif
                        return false;
                    }
                }
                else
                {
#ifdef DEBUG
                    fprintf( stderr , "[%s][%d][%s][< access > fail , RetCode: %d , ErrCode:%d , ErrMsg:%s]\n" , \
                             __FILE__ , __LINE__ , __FUNCTION__ , iStatus , errno , strerror( errno ) );
#endif
                    return false;
                }
            }

            refChar = '/';

        }

    }

    return true;
}

本站原创文章,转载请注明出处。