Pesquisar neste blog

quarta-feira, 28 de março de 2012

Apagando linhas em branco

Apagando linhas em branco no vim



Essa pode ser útil para muitos, para apagar todas as linhas em branco de um arquivo aberto no vim, digite o seguinte comando no editor:

:g/^$/:delete

ou seja:
g = global, documento inteiro
^ = início de linha
$ = final de linha
PS.: o padrão ^$ significa tudo que não tem nada entre o início e final de linha
:delete = apagar a linha que casa com o padrão acima



ou

Eliminando linhas em branco



Para eliminar linhas em branco de um arquivo texto, utilize qualquer um dos comandos:

$ sed '/^$/d' arquivo.txt > novoarquivo.txt
ou
$ awk 'NF>0' arquivo.txt > novoarquivo.txt

Qualquer um dos dois comandos funciona.

segunda-feira, 12 de março de 2012

[NAGIOS] - O que RSZDT significa?

PROCESS STATE CODES - different values that the s, stat and state output specifiers(header "STAT" or "S") will display to describe the state of a process.

D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since kernel 2.6.xx)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.

quarta-feira, 7 de março de 2012

Comunicação Serial RS232 - Monitor Samsung 400MX

Olá pessoal,
para quem usa o sistema de digital signage e deseja fazer a automação/programação para ligar e desligar os monitores conectados aos mini-pcs via porta serial rs232. Esse mesmo código abaixo pode ser usado para outros tipos de Monitores, basta verificar nos manuais quais são os comandos, no meu caso o monitor aceita comandos pré-definidos pelo manual, esses comandos são em hexadecimais.


#include iostream
#include conio.h
#include stdio.h
#include time.h
#include windows.h
#include string.h
#include serial.h

// Flow control flags

#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04

// ascii definitions

#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13

HANDLE* ptr;

using namespace std;
// variables used with the com port
BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;

HANDLE SerialInit(char *ComPortName, int BaudRate)
{
char status;
DWORD dwStoredFlags;

HANDLE hCom;

hCom = CreateFile(ComPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template

if (hCom == INVALID_HANDLE_VALUE)
{
printf ("CreateFile failed with error %d.\n", GetLastError());
printf("Can not open %s!!\n\n",ComPortName);
system("pause");
exit(1);
} else {
status = 1;
}

dwStoredFlags = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING |\
EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY ;
if (!SetCommMask(hCom, dwStoredFlags))
printf("Can not open %s!!\n\n",ComPortName);

bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes


if (bPortReady = GetCommState(hCom, &dcb))
{
dcb.BaudRate = BaudRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;

// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = FALSE; // turn on CTS flow control
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
//dcb.fDtrControl = DTR_CONTROL_ENABLE; //
dcb.fDtrControl = DTR_CONTROL_DISABLE; //
// dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //
} else {
printf("Erro de parametrizacao!!\n\n");
}

bPortReady = SetCommState(hCom, &dcb);

// Communication timeouts are optional

bPortReady = GetCommTimeouts (hCom, &CommTimeouts);

CommTimeouts.ReadIntervalTimeout = 5000;
CommTimeouts.ReadTotalTimeoutConstant = 5000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 5000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;

bPortReady = SetCommTimeouts (hCom, &CommTimeouts);

if (status == 1){
printf("Comunicacao com a porta %s: Ok\n",ComPortName);
}

return hCom;
}

char SerialGetc(HANDLE *hCom)
{
char rxchar;
BOOL bReadRC;
static DWORD iBytesRead;

bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);

return rxchar;
}

void SerialPutc(HANDLE *hCom, char txchar)
{
BOOL bWriteRC;
static DWORD iBytesWritten;
bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);
return;
}

char* SerialGets(HANDLE *hCom)
{
static char rxstring[256];
char c;
int pos = 0;

while(pos <= 255) { c = SerialGetc(hCom); if(c == '\r') continue; // discard carriage return rxstring[pos++] = c; if(c == '\n') break; } rxstring[pos] = 0; return rxstring; } void SerialPuts(HANDLE *hCom, char *txstring) { BOOL bWriteRC; static DWORD iBytesWritten; bWriteRC = WriteFile(*hCom, txstring, strlen(txstring), &iBytesWritten,NULL); } void sleep( int _wait) { clock_t goal; goal = clock() + _wait; while( goal > clock() );
}

int desliga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x00",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x10",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}

int liga(HANDLE *hCom)
{
if(!WriteFile(*hCom,"\xAA",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\xFE",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x01",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
if(!WriteFile(*hCom,"\x11",1,&iBytesWritten,NULL)) printf("Erro ao enviar comando.\n");
}



int main(int argc, char *argv[])
{
int op = atoi(argv[1]);

HANDLE my=SerialInit("com2",9600);


switch (op) {
case 1:
liga(&my);
break;
case 0:
desliga(&my);
break;
}

liga(&my);
//Fecha porta serial
printf(" %c ",SerialGetc(&my));
CloseHandle(&my);
return 0;
system("pause");
}



Arquivo Serial.h

// Flow control flags

#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04

// ascii definitions
#include stdio.h
#include time.h
#include string.h

#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13


HANDLE SerialInit(char*, int);

char SerialGetc(HANDLE*);

void SerialPutc(HANDLE*, char);

char* SerialGets(HANDLE*);

void SerialPuts(HANDLE*, char*);

void sleep(int);

quinta-feira, 1 de março de 2012

VIM - Substituindo tabs por espaços

Se você estiver precisando trocar "Tab" por espaços para identação basta fazer o seguinte:

:set tabstop=n // seta para cada tab o número n de espaços
:set expandtab // troca a tab por espaço

Note que para as tabs já existentes no código estes comandos não funcionarão, para ajustar isto basta fazer:

:retab 

Shellscript - Como converter strings maiúsculas para minusculas e vice-versa

echo 'string em caixa baixa' | tr [:lower:] [:upper:]
Caso queria converter de maiúsculo para minusculo basta fazer o processo inverso:
echo 'STRING EM CAIXA ALTA' | tr [:upper:] [:lower:]