#include <pwd.h>
#include <grp.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
int RmDir( const char* pSrc );
int ViewFile( const char* pSrc );
int RemoveFile( const char* pSrc );
int ChownFile( const char* pSrc, const char* tOwner, const char* tGroupe );
int ChmodFile( const char* pSrc, mode_t tMode );
int RenameFile( const char* pSrc, const char* pDst ); // Moveも同様
int MakeDir( const char* pDir );
int CopyFile( const char* pSrc, const char* pDst );
#define ERRLOG() printf( "Error Line=[%d]\n", __LINE__ );
int main(int argc, char* argv[])
{
char* pCmd = argv[0];
char* pParam1 = argv[1];
char* pParam2 = argv[2];
printf("argv[0]=[%s]\n", pCmd );
printf("argv[1]=[%s]\n", pParam1);
printf("argv[2]=[%s]\n", pParam2);
printf("main() start\n");
RmDir( "test" );
/**********************************/
/* chmod */
// char* endptr = NULL;
// mode_t mode = 0;
// mode = strtol( pParam1, &endptr, 8 );
// if( endptr == pParam1 )
// {
// ERRLOG();
// return -1;
// }
// ChmodFile( "test1.txt", mode );
/**********************************/
// ViewFile( "Makefile" );
// RemoveFile( "test1.txt" );
// ChownFile( "test1.txt", "toyo", "toyo" );
// RenameFile( "test3.txt", "testDir2/test3.txt" );
// MakeDir( "testDir" );
// CopyFile( "test1.txt", "test2.txt" );
return 0;
}
int RmDir( const char* pSrc )
{
int iRet = 0;
struct dirent* dir;
printf( "File=[%s]\n", pSrc );
DIR* dp = opendir( pSrc );
if( dp == NULL )
{
ERRLOG();
return -1;
}
iRet = chdir( pSrc );
if( iRet != 0 )
{
printf( "dir=[%s]", pSrc );
ERRLOG();
return -1;
}
while( NULL != (dir = readdir( dp ) ) )
{
if( dir->d_type == 4 )
{
if( (0 == strcmp( ".", dir->d_name )) || (0 == strcmp( "..", dir->d_name )) )
{ continue; }
else
{
RmDir( dir->d_name );
}
printf( "dell : dir=[%s]\n", dir->d_name ); // rmdirに置き換える
}
else
{
printf( "dell : type=[%d] name=[%s]\n", dir->d_type, dir->d_name ); //remove に置き換える
}
}
closedir( dp );
return 0;
}
int ViewFile( const char* pSrc )
{
int iRet = 0;
int fdSrc = 0;
int iReadSize = 0;
char cBuff[10] = {0};
struct stat tStat;
/* Check File Exists */
iRet = stat( pSrc, &tStat );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
/* File Open */
fdSrc = open( pSrc, O_RDONLY );
if( fdSrc < 0 )
{
ERRLOG();
return -1;
}
while( 0 < ( iReadSize = read(fdSrc, cBuff, sizeof(cBuff)-1) ) )
{
if( iReadSize < (int)(sizeof(cBuff)-1) )
{
cBuff[iReadSize] = 0x00;
}
printf( "%s",cBuff );
}
printf("\n");
return 0;
}
int RemoveFile( const char* pSrc )
{
int iRet = 0;
iRet = remove( pSrc );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
return 0;
}
int ChownFile( const char* pSrc, const char* pcOwner, const char* pcGroupe )
{
int iRet = 0;
uid_t tUid;
gid_t tGid;
struct passwd* ptPasswd;
struct group* ptGroupe;
ptPasswd = getpwnam( pcOwner ); // POSIX
tUid = ptPasswd->pw_uid;
ptGroupe = getgrnam( pcGroupe ); // POSIX
tGid = ptGroupe->gr_gid;
printf( "tUid=[%d]\n", tUid );
printf( "tGid=[%d]\n", tGid );
iRet = chown( pSrc, tUid, tGid );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
return 0;
}
int ChmodFile( const char* pSrc, mode_t tMode )
{
int iRet = 0;
iRet = chmod( pSrc, tMode );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
return 0;
}
int RenameFile( const char* pSrc, const char* pDst )
{
int iRet = 0;
struct stat tStat;
/* Check File Exists */
iRet = stat( pDst, &tStat );
if( iRet == 0 )
{
ERRLOG();
return -1;
}
iRet = rename( pSrc, pDst );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
return 0;
}
int MakeDir( const char* pDir )
{
int iRet = 0;
iRet = mkdir( pDir, 00755 );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
return 0;
}
int CopyFile( const char* pSrc, const char* pDst )
{
int iRet = 0;
int fdSrc = 0;
int fdDst = 0;
int iReadSize = 0;
int iWriteSize = 0;
struct stat tStatSrc;
struct stat tStatDst;
char cBuff[10] = {0};
/* Check File Exists */
iRet = stat( pSrc, &tStatSrc );
if( iRet != 0 )
{
ERRLOG();
return -1;
}
/* Check File Exists */
iRet = stat( pDst, &tStatDst );
if( iRet == 0 )
{
ERRLOG();
return -1;
}
/* File Open */
fdSrc = open( pSrc, O_RDONLY );
if( fdSrc < 0 )
{
ERRLOG();
return -1;
}
/* File Open */
fdDst = open( pDst, O_CREAT | O_WRONLY, tStatSrc.st_mode );
if( fdDst < 0 )
{
ERRLOG();
return -1;
}
/* File Read */
while( 0 < ( iReadSize = read(fdSrc, cBuff, sizeof(cBuff)) ) )
{
iWriteSize = write( fdDst, cBuff, iReadSize );
printf( "FileSize=[%d]\n", iWriteSize );
}
/* File Close */
close( fdSrc );
close( fdDst );
return 0;
}
最終更新:2013年12月01日 18:52