Blog dedicado ao conteúdo e dicas sobres tecnologia em geral, envolvendo PCs, portáteis, Hardware, Softwares, Sistemas Operacionas e utilitários
terça-feira, 25 de setembro de 2012
Qual a do C?: Verdadeiro e falso
Qual a do C?: Verdadeiro e falso: A linguagem c não possui um tipo de dado booleano, então de que forma ele trada o que é verdadeiro e falso? Sabe-se que para a linguagem C ...
Qual a do C?: Verdadeiro e falso
Qual a do C?: Verdadeiro e falso: A linguagem c não possui um tipo de dado booleano, então de que forma ele trada o que é verdadeiro e falso? Sabe-se que para a linguagem C ...
Como instalar o gcc no Mac OS.
Existe várias maneiras de instalar o gcc no mac, no entanto vamos tratar aqui apenas uma delas:
Primeiro você tem que ter instalado em sua máquina o Xcode.
Agora basta instalar, siga os passos:
1: Abra o Xcode
2: Agora installe a ferramenta de linha de comando ou"command line tools" a partir do seguinte atalho:
3: Clique em install e pronto.
Primeiro você tem que ter instalado em sua máquina o Xcode.
Agora basta instalar, siga os passos:
1: Abra o Xcode
2: Agora installe a ferramenta de linha de comando ou"command line tools" a partir do seguinte atalho:
Xcode menu > Preferences > Downloads
.3: Clique em install e pronto.
segunda-feira, 24 de setembro de 2012
Função getch() no Linux
A função getch() está disponivel na biblioteca conio.h não disponível em linux.
Para isso basta usar um comando similar que tem a mesma função e está diponível na stdio.h
ex:
include
main()
{
char x;
scanf("%c", &x);
// funciona da mesma maneira que o getche()
}
Espero que tenha sido de ajuda.
Para isso basta usar um comando similar que tem a mesma função e está diponível na stdio.h
ex:
include
main()
{
char x;
scanf("%c", &x);
// funciona da mesma maneira que o getche()
}
Espero que tenha sido de ajuda.
Dicas Rápidas de C
Contante hexadecimal (base dezesseis) Começam com '0x'
Octal (base oito) Começam com '0'
Portanto não escreva 013 achando que o C vai complicar como 13. 013 diferente de 13.
Declaração de Varialvel
tipo_da_variavel nome_da_variavel = contante;
Ex.
Char ch='D';
int count=0;
float pi=3.141;
int a = 17, b = 3;
Funções:
Printf() : A função printf tem a seguinte forma geral
printf(string_de_controle), lista_de_argumentos);
Codigo Significado
%d Inteiro
%f Float
%c Caractere
%s String
%% Coloca na tela um %
Octal (base oito) Começam com '0'
Portanto não escreva 013 achando que o C vai complicar como 13. 013 diferente de 13.
Declaração de Varialvel
tipo_da_variavel nome_da_variavel = contante;
Ex.
Char ch='D';
int count=0;
float pi=3.141;
int a = 17, b = 3;
- Constantes de barra invertida : São caracteres com código
Código \b \f \n \r \t \" \' \0 \\ \v \a \N \xN | Significado Retrocesso ("back") Alimentação de formulário ("form feed") Nova linha ("new line") Retorno de carro ("carriage return") Tabulação horizontal ("tab") Aspas Apóstrofo Nulo (0 em decimal) Barra invertida Tabulação vertical Sinal sonoro ("beep") Constante octal (N é o valor da constante) Constante hexadecimal (N é o valor da constante) |
Printf() : A função printf tem a seguinte forma geral
printf(string_de_controle), lista_de_argumentos);
Codigo Significado
%d Inteiro
%f Float
%c Caractere
%s String
%% Coloca na tela um %
Operadores Aritméticos e de Atribuição
Os operadores aritméticos são usados para desenvolver operações matemáticas. A seguir apresentamos a lista dos operadores aritméticos do C:Operador + - * / % ++ -- | Ação Soma (inteira e ponto flutuante) Subtração ou Troca de sinal (inteira e ponto flutuante) Multiplicação (inteira e ponto flutuante) Divisão (inteira e ponto flutuante) Resto de divisão (de inteiros) Incremento (inteiro e ponto flutuante) Decremento (inteiro e ponto flutuante) |
Os operadores de incremento e decremento são unários que alteram a variável
sobre a qual estão aplicados. O que eles fazem é incrementar ou decrementar, a
variável sobre a qual estão aplicados, de 1.
Então
x++; x--;
Então
x++; x--;
são equivalentes a
x=x+1;
x=x-1;
Os operadores relacionais retornam verdadeiro (1) ou falso (0). Para fazer operações com valores lógicos (verdadeiro e falso) temos os operadores lógicos:
Usando os operadores relacionais e lógicos podemos realizar uma grande gama de testes. A tabela-verdade destes operadores é dada a seguir:
Operadores Relacionais e Lógicos
Os operadores relacionais do C realizam comparações entre variáveis. São eles:Operador >.= < <= == != | Ação Maior do que Maior ou igual a Menor do que Menor ou igual a Igual a Diferente de |
Operador && || ! | Ação AND (E) OR (OU) NOT (NÃO) |
p falso falso verdadeiro verdadeiro | q falso verdadeiro falso verdadeiro | p AND q falso falso falso verdadeiro | p OR q falso verdadeiro verdadeiro verdadeiro |
Exemplo: No trecho de programa abaixo o if será executado, pois o resultado da expressão lógica é verdadeiro:
Os operadores &, |, ^ e ~ são as operações lógicas bit a bit. A forma geral dos operadores de deslocamento é:
valor>>número_de_deslocamentos
valor<
O número_de_deslocamentos indica o quanto cada bit irá ser deslocado. Por exemplo, para a variável i anterior, armazenando o número 2:
i << 3;
Operadores Lógicos Bit a Bit
O C permite que se faça operações lógicas "bit-a- bit" em números. Ou seja, neste caso, o número é representado por sua forma binária e as operações são feitas em cada bit dele. Imagine um número inteiro de 16 bits, a variável i, armazenando o valor 2. A representação binária de i, será: 0000000000000010 (quinze zeros e um único 1 na segunda posição da direita para a esquerda). Poderemos fazer operações em cada um dos bits deste número. Por exemplo, se fizermos a negação do número (operação binária NOT, ou operador binário ~ em C), isto é, ~i, o número se transformará em 1111111111111101. As operações binárias ajudam programadores que queiram trabalhar com o computador em "baixo nível". As operações lógicas bit a bit só podem ser usadas nos tipos char, int e long int. Os operadores são:
Operador | Ação |
---|---|
& | AND |
| | OR |
^ | XOR (OR exclusivo) |
~ | NOT |
>> | Deslocamento de bits a direita |
<< | Deslocamento de bits a esquerda |
valor>>número_de_deslocamentos
valor<
O número_de_deslocamentos indica o quanto cada bit irá ser deslocado. Por exemplo, para a variável i anterior, armazenando o número 2:
i << 3;
fará com que i agora tenha a representação binária: 0000000000010000, isto é, o valor armazenado em i passa a ser igual a 16.
domingo, 23 de setembro de 2012
Bibliotecas em C
Falando um pouco de Biblioteca em C:
Os arquivos de biblioteca tem a extensão .h (header) e os arquivos que programamos na linguagem c usam a extensão .c.
Quando criamos um programa que precisa usar uma função de sistema somos obrigados a incluir o cabeçalho da biblioteca que contém a função desejada.
Por exemplo, para criar um programa que mostre mensagens na tela usamos a função printf(). Como ela está contida na biblioteca stdio somos obrigados a incluir essa biblioteca no começo do nosso programa.
Biblioteca stdio
File access:
Formatted input/output:
Character input/output:
Direct input/output:
File positioning:
Error-handling:
Pseudo-random sequence generation:
Dynamic memory management:
Environment:
Searching and sorting:
Integer arithmethics:
Multibyte characters:
Multibyte strings:
stdio.h (acrônimo de standard input/output header ) é uma biblioteca que contém funções, macros e constantes padrões ao compilador.
Todo programa em C que usar funções para entrada ou saída de dados como o resgate de valores digitados pelo usuário ou então exibição de mensagens de retorno exigirá a inclusão do cabeçalho stdio.h
Uma lista de Funções da biclioteca sdtio
Functions
Operations on files:- remove
- Remover o arquivo (function )
- rename
- Rename file (function )
- tmpfile
- Open a temporary file (function)
- tmpnam
- Generate temporary filename (function)
File access:
- fclose
- Close file (function)
- fflush
- Flush stream (function)
- fopen
- Open file (function )
- freopen
- Reopen stream with different file or mode (function )
- setbuf
- Set stream buffer (function )
- setvbuf
- Change stream buffering (function )
Formatted input/output:
- fprintf
- Write formatted output to stream (function )
- fscanf
- Read formatted data from stream (function )
- printf
- Print formatted data to stdout (function )
- scanf
- Read formatted data from stdin (function )
- sprintf
- Write formatted data to string (function )
- sscanf
- Read formatted data from string (function )
- vfprintf
- Write formatted variable argument list to stream (function )
- vprintf
- Print formatted variable argument list to stdout (function )
- vsprintf
- Print formatted variable argument list to string (function )
Character input/output:
- fgetc
- Get character from stream (function)
- fgets
- Get string from stream (function )
- fputc
- Write character to stream (function)
- fputs
- Write string to stream (function)
- getc
- Get character from stream (function)
- getchar
- Get character from stdin (function)
- gets
- Get string from stdin (function )
- putc
- Write character to stream (function)
- putchar
- Write character to stdout (function)
- puts
- Write string to stdout (function)
- ungetc
- Unget character from stream (function)
Direct input/output:
- fread
- Read block of data from stream (function )
- fwrite
- Write block of data to stream (function)
File positioning:
- fgetpos
- Get current position in stream (function)
- fseek
- Reposition stream position indicator (function)
- fsetpos
- Set position indicator of stream (function)
- ftell
- Get current position in stream (function)
- rewind
- Set position indicator to the beginning (function)
Error-handling:
- clearerr
- Clear error indicators (function)
- feof
- Check End-of-File indicator (function)
- ferror
- Check error indicator (function)
- perror
- Print error message (function)
Macros
- EOF
- End-of-File (constant)
- FILENAME_MAX
- Maximum length of file names (constant)
- NULL
- Null pointer (constant)
- TMP_MAX
- Number of temporary files (constant)
cstdlib (stdlib.h)
C Standard General Utilities Library
Este cabeçalho define várias funções de uso geral, incluindo a gestão de memória dinâmica, geração de números aleatórios, a comunicação com o meio ambiente, aritiméticos inteiros, pesquisa, classificação e conversão.Functions
String conversion:- atof
- Convert string to double (function )
- atoi
- Convert string to integer (function )
- atol
- Convert string to long integer (function )
- strtod
- Convert string to double (function )
- strtol
- Convert string to long integer (function )
- strtoul
- Convert string to unsigned long integer (function )
Pseudo-random sequence generation:
- rand
- Generate random number (function)
- srand
- Initialize random number generator (functions)
Dynamic memory management:
- calloc
- Allocate space for array in memory (function)
- free
- Deallocate space in memory (function)
- malloc
- Allocate memory block (function)
- realloc
- Reallocate memory block (function)
Environment:
- abort
- Abort current process (function)
- atexit
- Set function to be executed on exit (function)
- exit
- Terminate calling process (function)
- getenv
- Get environment string (function)
- system
- Execute system command (function )
Searching and sorting:
- bsearch
- Binary search in array (function )
- qsort
- Sort elements of array (function)
Integer arithmethics:
- abs
- Absolute value (function)
- div
- Integral division (function )
- labs
- Absolute value (function)
- ldiv
- Integral division (function )
Multibyte characters:
- mblen
- Get length of multibyte character (function)
- mbtowc
- Convert multibyte character to wide character (function)
- wctomb
- Convert wide character to multibyte character (function)
Multibyte strings:
- mbstowcs
- Convert multibyte string to wide-character string (function)
- wcstombs
- Convert wide-character string to multibyte string (function)
Macros
- EXIT_FAILURE
- Failure termination code (macro)
- EXIT_SUCCESS
- Success termination code (macro)
- MB_CUR_MAX
- Maximum size of multibyte characters (macro)
- NULL
- Null pointer (macro)
- RAND_MAX
- Maximum value returned by rand (macro)
Types
- div_t
- Structure returned by div (type)
- ldiv_t
- Structure returned by div and ldiv (type)
- size_t
- Unsigned integral type (type)
Desafio em C no Unix – Simulando o comando: cat | more
Considere um programa que apresenta a sua saída página por página. Ao invés de reinventar a paginação feita por vários utilitários do sistema Unix, desejamos chamar o paginador favorito do usuário (more, less, …). Faça um programa que use um pipe para redirecionar a saída para o paginador. O programa recebe o nome do arquivo a ser mostrado como entrada e repassa linha a linha deste arquivo a um processo filho através de um pipe. O processo filho irá executar o paginador.
Vamos inicialmente conceituar alguns comandos a serem utiliados:
more - filtro de arquivo para leitura e visualização em monitores
Descrição: é um filtro para paginar textos em uma tela de cada vez. Este paginador é simples. Os usuários devem perceber que o comendo less (1) prover mais de emulação (1) e mais melhorias.
less - O oposto do more
Descrição: less é um programa semelhante ao more , mas que permite o movimento para trás no arquivo, bem como o movimento para frente. Além disso, menos não tem que ler o arquivo de entrada inteiro antes de começar, portanto, com grandes entradas começa-se mais rápido do que editores de texto como vi.
pipe - Cria um pipe
Descrição
O Pipe, utilizado através do comando “|” permite que a saída de um comando seja diretamente utilizado em outro comando. O pipe tem seu nome inspirado nos tubos (pipes), de transporte de fluídos. A ideia do PIPE é encadear um conjunto de processos, de modo que a saída de cada um seja a entrada do seguinte.
O exemplo abaixo mostra claramente como utilizar o Pipe:
$ ls -l | grep imagem | sort -r
O primeiro comando ls -l lista o conteúdo do diretório em formato longo, a seguir o comando Pipe faz com que a saída do primeiro comando entre no segundo comando, grep imagem que procura na listagem do diretório qualquer arquivo que possua a palavra imagem, por final, a saída do comando grep imagem é utilizada no comando sort -r que faz a classificação de forma crescent
Conding in C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char *argv[]) {
int fd[2], pid1, pid2;
char *my_program1[3] = {“/bin/cat”, argv[1], NULL};
char *my_program2[2] = {“/bin/more”, NULL};
pipe(fd);
if((pid1 = fork()) == 0) {
close(STDOUT_FILENO);
dup(fd[1]);
close(fd[0]); close(fd[1]);
execv(my_program1[0], my_program1);
}
if((pid2 = fork()) == 0) {
close(STDIN_FILENO);
dup(fd[0]);
close(fd[0]); close(fd[1]);
execv(my_program2[0], my_program2);
}
close(fd[0]); close(fd[1]);
waitpid(pid1, NULL, 0);
waitpid(pid2, NULL, 0);
return 0;
}
Vamos ao Primeiro Código:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char *argv[]) {
int fd[2], pid1, pid2;
char *my_program1[3] = {“/bin/cat”, argv[1], NULL};
char *my_program2[2] = {“/bin/more”, NULL};
pipe(fd);
if((pid1 = fork()) == 0) {
close(STDOUT_FILENO);
dup(fd[1]);
close(fd[0]); close(fd[1]);
execv(my_program1[0], my_program1);
}
if((pid2 = fork()) == 0) {
close(STDIN_FILENO);
dup(fd[0]);
close(fd[0]); close(fd[1]);
execv(my_program2[0], my_program2);
}
close(fd[0]); close(fd[1]);
waitpid(pid1, NULL, 0);
waitpid(pid2, NULL, 0);
return 0;
}
Executando
Para executar o código, não se esqueça de gerar a compilação do arquivo, como por exemplo:
gcc -o CatMore CatMore.c
gcc -o CatMore CatMore.c
Após, para execução, o programinha espera que você passe o nome do arquivo que deve ser lido por parâmetro, por exemplo:
./CatMore CatMore.c
./CatMore CatMore.c
O resultado disso será a leitura do próprio arquivo CatMore.c.
Explicação do Primeiro Código
Este código está bem simples. Foi a primeira versão que fiz para atender ao problema, porém ainda não está completamente correto. Se vocês repararem no enunciado, tem o seguinte detalhe: ‘e repassa linha a linha deste arquivo a um processo filho através de um pipe’, o que quer dizer que não podemos usar o cat para ler o arquivo desejado, devemos fazer o código que percorrerá linha a linha do arquivo passado por parâmetro e jogar no pipe para que o more possa lê-lo da forma desejada.
Então, Vamos ao Segundo Código:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 4096
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 4096
int main(int argc, char *argv[]) {
int n, fd[2];
pid_t pid;
char line[MAXLINE];
char *my_program[2] = {“/bin/more”, NULL};
FILE *arquivo;
pid_t pid;
char line[MAXLINE];
char *my_program[2] = {“/bin/more”, NULL};
FILE *arquivo;
if (pipe(fd) < 0) {
fprintf(stderr, “pipe error”);
fprintf(stderr, “pipe error”);
}
if ((pid = fork()) < 0) {
fprintf(stderr, “fork error”);
} else if (pid > 0) {
if ((pid = fork()) < 0) {
fprintf(stderr, “fork error”);
} else if (pid > 0) {
/* parent */
close(fd[0]);
arquivo = fopen(argv[1],”r”);
while (fgets(line, MAXLINE, arquivo) != NULL)
{
write(fd[1], line , (strlen(line)));
}
arquivo = fopen(argv[1],”r”);
while (fgets(line, MAXLINE, arquivo) != NULL)
{
write(fd[1], line , (strlen(line)));
}
fclose(arquivo);
close(fd[1]);
waitpid(pid, NULL, 0);
exit(0);
} else {
/* child */
close(STDIN_FILENO);
dup(fd[0]);
close(fd[1]);
execv(my_program[0], my_program);
}
return 0;
}
Fontes:
http://www.vivaolinux.com.br/dica/Pipes-no-Linux; http://jairofranchi.wordpress.com/2011/03/24/utilizando-o-comando-pipe-linux/ http://www.quaddro.com.br/blog/programando-em-ansi-c/estudando-bibliotecas-de-c-stdio-h
http://joelsonlucena.wordpress.com/2012/09/19/desafio-em-c-no-unix-simulando-o-comando-cat-more/
Assinar:
Postagens (Atom)