1 / 22

Introdução de um programa no sistema, mostrando a interação com o sistema

Introdução de um programa no sistema, mostrando a interação com o sistema (programa 1.1). Utilização do compilador/ligador (cc – gcc). /* * Mostra Hello World 3 vezes */ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <stdlib.h> #include <unistd.h>

ganesa
Download Presentation

Introdução de um programa no sistema, mostrando a interação com o sistema

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução de um programa no sistema, mostrando a interação com o sistema (programa 1.1). Utilização do compilador/ligador (cc – gcc). /* * Mostra Hello World 3 vezes */ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <stdlib.h> #include <unistd.h> char cptr = “Hello World\n”; /* Static */ char buffer1[25]; main(void) { void showit( char * ); /* protótipo de função */ int i = 0; /* variável automática */ strcpy( buffer1, “Uma demonstração\n”); /* função de biblioteca */ write( 1, buffer1, strlen(buffer1)+1 ); /* chamada de sistema */ for ( ; i < 3; ++i ) showit(cptr); /* chamada de função */ } void showit( char *p) { char *buffer2; if ( (buffer2=(char *) malloc((unsigned) (strlen(p)+1))) != NULL) { strcpy( buffer2, p); /* copia string */ printf(“%s”,buffer2); /* mostra string */ free( buffer2 ); /* libera espaço */ } else { printf(“erro de alocação.\n”); exit(1); } }

  2. http://www.linux.org/ http://unixhelp.ed.ac.uk/ http://www.cs.cf.ac.uk/Dave/C/CE.html http://www.strath.ac.uk/IT/Docs/Ccourse/ http://www.dca.fee.unicamp.br/~ricarte/ProgSist/node122.html http://www.softpanorama.org/Internals/unix_system_calls_links.shtml http://www.cplusplus.com/doc/tutorial/ http://www.intap.net/~drw/cpp/

  3. O Unix utiliza dois conjuntos de identificadores de usuário, real e efetivo. Os identificadores reais UID e GID encontram-se no arquivo de password na entrada referente a cada usuário (campos 4 e 5). O segundo conjunto é o efetivo EUID e EGID. O sistema utiliza o real para identificar o usuário para coisas como: contabilidade e envio de e-mail, enquanto que o efetivo é usado para determinar que permissões (acesso a arquivos) adicionais devem ser garantidas ao processo, quando o usuário deste processo precisa acessar/modificar arquivos privilegiados (arquivo de password). Para isto o Unix oferece um conjunto de permissões adicionais (SUID, SGID) que podem ser especificadas pelo dono do arquivo. Estas indicações fazem com que o SO, quando executar o programa, permita ao processo os mesmos privilégios do dono/grupo do programa. Ou seja, o EUID para o processo é aquele indicado para o dono do arquivo.

  4. Arquivos O sistema também prove um conjunto de informações referentes ao sistema de arquivos e aos arquivos propriamente ditos. No caso do sistema de arquivos, associado a cada arquivo aberto existe um valor inteiro (apontador do descritor) usado pelo sistema como índice de uma tabela de descritores de arquivos (64 entradas) que esta localizada na u-area. Esta tabela (por processo) faz referência a uma tabela de arquivos do sistema (global) que por sua vez referencia a uma tabela de i-nodes do sistema (figura ). Referente a informações sobre os arquivos, existem algumas chamadas de sistema que são usadas com este propósito (stat, lstat, fstat). Neste caso, dado um nome de arquivo path a função stat retorna uma estrutura de informações sobre o mesmo.

  5. struct stat { mode_t st_mode; /* tipo e modo (permissões) */ ino_t st_ino; /* i-node */ dev_t st_dev; /* numero do dispositivo */ dev_t st_rdev; /* dispositivo arquivos especiais */ nlink_t st_nlink; /* numero de links */ uid_t st_uid; /* UID do dono */ gid_t st_gid; /* GID do dono */ off_t st_size; /* tamanho em bytes */ time_t st_atime; /* ultimo acesso */ time_t st_mtime; /* ultima modificação */ time_t st_ctime; /* ultima mudança de estado */ long st_blksize; /* melhor tamanho de bloco */ long st_blocks; /* blocos (512b) alocados */ };

  6. Com respeito as permissões de acesso aos arquivos existem também chamadas de sistema (chmod, fchmod) que permitem mudar o modo de acesso. A função chmod utiliza o arquivo especificado e a função fchmod utiliza um arquivo já aberto. A mudança de modo de acesso é permitida se o EUID do processo for igual ao dono do arquivo ou se o processo tem permissões de super-usuário.

  7. Outras funções de biblioteca permitem ao programa modificar outros atributos dos arquivos (umask, getcwd, chdir, fchdir). A função umask atribui ao processo uma máscara de criação de arquivos. A função getcwd retorna caminho do diretório corrente, para isto é necessário um parâmetro buff que vai conter o nome. As funções chdir e fchdir são usadas para mudar o diretório corrente para um especificado.

  8. Recurso  É possível obter informações sobre os limites de um processo no que diz respeito a recursos. No caso da obtenção desta informação via interface de usuário existe um comando limit que mostra os limites do sistema ( limit –h) ou processo corrente (limit). Estas informações também podem ser usadas por um processo no ambiente de programação através de chamada de sistema e funções de biblioteca (ulimit, getrlimit, setrlimit).

  9. Linha de Comando Parte do ambiente de processamento para os processos são valores passados para o processo na função main. Estes valores podem vir da linha de comando ou pela chamada de sistema exec. Os valores são armazenados/referenciados por um array de apontadores conhecido como argv. O número de elementos neste array é informado por um valor inteiro referenciado por argc. É possível para o programa verificar o conteúdo da linha de comando através de uma função de biblioteca (getopt).

  10. Variáveis do ambiente Cada processo também tem acesso a uma lista de variáveis de ambiente que também são armazenadas/referenciadas por um array de caracteres. O acesso a estas variáveis via programa é feito através de um ponteiro externo environ ( extern char **environ). Algumas funções de biblioteca estão disponíveis para manipular estas variáveis (getenv, putenv).

More Related