|
Página 1 de 1
|
Componente Gb.args ( Que Sabemos? )
Autor |
Mensaje |
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Componente Gb.args ( Que Sabemos? )
buenas...
alguien lo ha usado?
si es así tiene algún proyecto donde aprender algo?
servirá este componente para las aplicaciones de consola?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#1 Jueves, 12 May 2016, 20:52 |
|
|
vicr
Técnico Programador
Registrado: Septiembre 2013
Mensajes: 158
Edad: 47
|
Re: Componente Gb.args ( Que Sabemos? )
Humm... según Gambaswiki es una reimplementación de Args que es una clase que funciona como un Array.
En el proyecto gMiaau usaba esa característica que me permitía que al momento de llamar al programa se añadían argumentos estos los tomara como parámetros en el programa. Por ejemplo (lo siguiente hecho con el Scripting de gambas):
si llamas al programa y añades palabras las considerará como parámetros por cada espacio. Ejemplo de llamada
programa.gbs Hola como estás
luego del nombre del programa hay 3 argumentos. El args[0] es el mismo programa.
Edito: De la reimplementación, ni idea.
última edición por vicr el Jueves, 12 May 2016, 22:06; editado 1 vez
|
#2 Jueves, 12 May 2016, 22:06 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Componente Gb.args ( Que Sabemos? )
/* ************************************************************************
* Filename: ls.c
* Programmer: ZhuJinliang
* Description:
* Version: 1.0
* Created: 2011/11/02
* Function:
与ls命令类似,命令行参数可以有0到多个
0个参数:列出当前目录下所有文件
参数为目录:列出目录下所有文件
-a:列出目录下所有文件包括以“.”和“..”开头的
-d:当遇到目录时列出目录本身而非目录内的文件
-l:使用较长格式列出信息
-S:根据文件大小排序
-t:根据文件修改时间排序
* ************************************************************************/
/*header file*/
#include "includes.h"
/*global varible*/
int gl_aflag = 0;
int gl_dflag = 0;
int gl_lflag = 0;
int gl_Sflag = 0;
int gl_tflag = 0;
/* ****************************************************************************
* Function: GetOptions
* Desciption: get the option from command line
* Arguments: int argc, char *argv[]
* ****************************************************************************/
void GetOptions(int argc, char *argv[])
{
int ch;
opterr = 0; //do not display the err info
while ((ch = getopt(argc,argv,"adlSt")) != -1) //use getopt to get the options
{
switch (ch)
{
case 'a':
gl_aflag = 1;
break;
case 'd':
gl_dflag = 1;
break;
case 'l':
gl_lflag = 1;
break;
case 'S':
gl_Sflag = 1;
break;
case 't':
gl_tflag = 1;
break;
case '?':
printf("Unknown option: %c\n", (char)optopt);
break;
default:
printf("Step into the default mode!/n");
break;
}
}
}
/* ****************************************************************************
* Function: List
* Desciption: list the file
* Arguments: char *path
* ****************************************************************************/
int List(char *path)
{
struct stat st;
char temp[100];
if (path == NULL) //if path is NULL, get current file directory
{
path = temp;
getcwd(path, 100);
}
if (lstat(path, &st)) //open the inode of file
{
err_ret("Error: %s not exist.\n", path);
}
if (S_ISDIR(st.st_mode)) //check whether it is directory or a regular file
{
if (gl_dflag == 1) //if the option is -d, print the dir
{
printf("%s\n", path);
}
else
{
ListDir(path);
}
}
else if (S_ISREG(st.st_mode)) //if is regular file, then print the file name
{
Print(path);
}
else
{
printf("Not a regular file or directory, can't be listed.\n");
}
return 0;
}
/* ****************************************************************************
* Function: ListDir
* Desciption: list the directory
* Arguments: char *path
* ****************************************************************************/
int ListDir(char *path)
{
DIR *dp;
struct dirent *dirp;
struct stat st;
void *buf;
pFile pInfo = NULL;
PListNode pHead,pNode,cur;
if (!(pHead = InitList()))
{
err_sys("init list failed!");
}
if ((dp = opendir(path)) == NULL)
{
err_sys("can't open %s\n", path);
}
chdir(path); //cd the path
while ((dirp = readdir(dp)) != NULL)
{
if (((strcmp(dirp->d_name, ".")) == 0)
|| ((strcmp(dirp->d_name, "..")) == 0)
|| (dirp->d_name[0] == '.'))
{
if (gl_aflag == 0) //if the option is not -a, don't print the file whose name is start with "." ".."
{
continue;
}
}
if ((gl_Sflag == 1) || (gl_tflag == 1))
{
if (lstat(dirp->d_name, &st)) //open the inode of file
{
err_ret("Error: %s is not exist.\n", dirp->d_name);
}
pInfo = (pFile)malloc(sizeof(fileInfo));
pInfo->name = dirp->d_name;
pInfo->size = st.st_size;
pInfo->time = st.st_mtime;
if (!AddTail(pHead, pInfo))
{
printf("add node failed!");
}
}
else
{
Print(dirp->d_name);
}
}
TraverseList(pHead, PrintNode);
if (gl_Sflag == 1) //the option is -S, then sort according by size from max to min
{
SortList(pHead, CompareSize);
pNode = pHead->next;
while (pNode != NULL)
{
Print(((pFile)(pNode->data))->name);
pNode = pNode->next;
}
}
else if (gl_tflag == 1) //the option is -t, then sort according by time from lately to previous
{
SortList(pHead, CompareTime);
pNode = pHead->next;
while (pNode != NULL)
{
Print(((pFile)(pNode->data))->name);
pNode = pNode->next;
}
}
printf("\n");
if (closedir(dp))
{
err_sys("can't close the directory %s\n", path);
}
DeleteList(pHead);
return 0;
}
/* ****************************************************************************
* Function: Print
* Desciption: print file
* Arguments: char *path
* ****************************************************************************/
int Print(char *path)
{
struct stat st;
char *fileName = NULL;
char time[64];
if (lstat(path, &st)) //open the inode of file
{
err_ret("Error: %s is not exist.\n", path);
}
if ((fileName = strrchr(path, '/')) != NULL) //delete the directory, then get the file name
{
fileName++;
}
else
{
fileName = path;
}
if (gl_lflag == 1) //print with long former
{
(S_ISDIR(st.st_mode)) ? printf("d"): printf("-");
//print permissions
(st.st_mode & S_IRUSR) ? printf("r"): printf("-");
(st.st_mode & S_IWUSR) ? printf("w"): printf("-");
(st.st_mode & S_IXUSR) ? printf("x"): printf("-");
(st.st_mode & S_IRGRP) ? printf("r"): printf("-");
(st.st_mode & S_IWGRP) ? printf("w"): printf("-");
(st.st_mode & S_IXGRP) ? printf("x"): printf("-");
(st.st_mode & S_IROTH) ? printf("r"): printf("-");
(st.st_mode & S_IWOTH) ? printf("w"): printf("-");
(st.st_mode & S_IXOTH) ? printf("x"): printf("-");
printf("%3d", st.st_nlink);
if (st.st_uid == 1000)
{
printf("\tguest ");
}
else if (st.st_uid == 0)
{
printf("\troot ");
}
if (st.st_gid == 1000)
{
printf("guest ");
}
else if (st.st_gid == 0)
{
printf("root ");
}
strftime(time, sizeof(time), "%Y-%m-%d %H:%M", localtime(&st.st_mtime));
printf("%10ld %s %s\n", st.st_size, time, fileName);
}
else
{
printf("%s\t", fileName);
}
return 0;
}
/* ****************************************************************************
* Function: PrintNode
* Desciption: print list node
* Arguments: PListNode pHead
* ****************************************************************************/
void PrintNode(void *file)
{
printf("%s\t", ((pFile)file)->name);
printf("%10ld\t%10ld\n", ((pFile)file)->size, ((pFile)file)->time);
}
/* ****************************************************************************
* Function: CompareString
* Desciption:
* Arguments: PListNode pHead
*
* **************************************************************************/
int CompareString(void *file1, void *file2)
{
return (strcmp(((pFile)file1)->name, ((pFile)file2)->name));
}
/* ****************************************************************************
* Function: CompareSize
* Desciption:
* Arguments: void *file1, void *file2
*
* **************************************************************************/
int CompareSize(void *file1, void *file2)
{
if ((((pFile)file1)->size) <pFile>size))
{
return -1;
}
else if ((((pFile)file1)->size) > (((pFile)file2)->size))
{
return 1;
}
else
{
return 0;
}
}
/* ****************************************************************************
* Function: CompareTime
* Desciption:
* Arguments: void *file1, void *file2
*
* **************************************************************************/
int CompareTime(void *file1, void *file2)
{
if ((((pFile)file1)->time) <pFile>time))
{
return -1;
}
else if ((((pFile)file1)->time) > (((pFile)file2)->time))
{
return 1;
}
else
{
return 0;
}
}
/* ****************************************************************************
* Function: main
* Desciption:
* Arguments: int argc, char *argv[]
* ****************************************************************************/
int main (int argc, char *argv[])
{
GetOptions(argc, argv);
List(argv[optind]);
exit(0);
}
Status API Training Shop Blog About
© 2016 GitHub, Inc. Terms Privacy Security Contact Help
esto creo es el código fuente del famoso "ls" de la consola
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#3 Jueves, 12 May 2016, 22:13 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|