Programação C

POSIX Spawn com programação C

POSIX Spawn com programação C
Spawn é uma função usada em POSIX para carregar e executar processos filhos. O processo atualmente em execução no POSIX continuará ou não a executar esses processos filho e outros processos de forma assíncrona. Sempre que um novo subprocesso é criado, ele requer alguma memória específica que permitirá que o processo pai e filho sejam executados. No Microsoft Windows, UNIX e Linux, existe uma certa família de spawns; e outras famílias de funções de geração são consideradas uma extensão opcional.

Por que usar POSIX Spawn?

O posix_spawn () e posix_spawnp () funções são usadas para criar um novo processo filho. O processo filho então executa um arquivo. Essas funções foram especificadas por POSIX para padronizar o método de criação de novos processos para máquinas que não têm suporte de chamada de sistema fork. Essas máquinas são geralmente pequenas e não possuem os sistemas embarcados para suporte de lMMU.

As duas funções combinam fork e exec, com algumas etapas adicionais que irão executar o filho. Eles atuam como um subconjunto de funcionalidades, geralmente obtidas com um fork, para todas as chamadas de sistema e sistemas embarcados que não possuem essa funcionalidade.

Exemplo 1: posix_spawn ()

Neste exemplo, usaremos a função spawn () para criar e executar um novo processo filho. Então, vamos explicar todos os argumentos relevantes usados ​​na função.

Os argumentos usados ​​no exemplo são os seguintes:

Argumento Descrição
Usado para definir todas as operações de execução de spawn.
caminho O nome do caminho que deve ser executado.
fd_count O número de entradas com a matriz de fd_map. Se fd_count for igual a 0, então o fd_map é ignorado. Nesses casos, o processo filho herda todos os descritores de arquivo, ignorando aqueles que foram modificados.
fd_map
Uma matriz de descritores de arquivo a serem herdados pelo processo filho. Aqui, se o valor de fd_count não for 0, então fd_map é necessário para trazer os descritores de arquivo fd_count até um valor supremo de OPEN_MAX. Tem:

· A entrada do processo filho

· A saída

· Os valores de erro

herdar A herança da estrutura mostra que os usuários querem que seu processo filho herde tudo do pai.
argv O ponteiro para um vetor de argumento específico. O valor argv [0] não pode ser NULL e deve ser o nome do arquivo que está sendo carregado. O valor argv não pode ser igual a NULL.
envp Aponta para uma série de ponteiros de caracteres. Cada um dos ponteiros nesta matriz aponta para uma variável de ambiente. O ponto final da matriz é um ponteiro NULL.

Exemplo 2: teste.c

No exemplo a seguir, um novo processo filho é criado para executar o comando por / bin / sh -c. Este é o valor passado como o primeiro argumento. O teste.c o código é o seguinte:

No exemplo acima, chamamos as bibliotecas e, a seguir, chamamos de desova.h cabeçalho. Você também verá o posix_spawn () chamado para criar um processo filho no exemplo acima. O desova e desova funções são usadas no lugar do garfo e exec funções. Spawn () tem flexibilidade e oferece muita facilidade para os usuários de várias maneiras. É um pouco diferente de sistema() e exec (). Ele retornará e criará o novo processo filho. Em nosso exemplo, é pid. Acima, você pode ver que a função de espera waitpid (), então sistema() é usado. Observe que o spawn () e garfo() processos de chamada são os mesmos, e o método de implementação é mais ou menos o mesmo para ambas as funções.

Vamos agora executar o exemplo usando um gcc compilador. Você também pode usar qualquer outro compilador de sua escolha:

$ sudo gcc test.c-lrt

Em seguida, execute o seguinte:

$ ./uma.Fora

A saída do comando acima será a seguinte:

A criança pid será criado, como você pode ver na saída acima.

Biblioteca

Libc: Use o -l c para vincular o gcc compilador. Aqui, observe que esta biblioteca é incluída automaticamente.

Spawn ()

O desovar () função é baseada em POSIX 1003.1d esboço padrão usado como posix_spawn (). A biblioteca C inclui funções spawn * (). Aqui, listaremos alguns sufixos, junto com suas descrições:

e: usado como um array para variáveis ​​de ambiente.

eu: usado como uma lista terminada em NULL dos argumentos usados ​​dentro do programa.

p: usado para definir um caminho relativo. Se o caminho não tiver uma barra em seu valor, o sistema usa e pesquisa a variável de ambiente PATH para qualquer programa semelhante.

v: atua como um vetor de argumentos dentro do programa.

Descritores de arquivo de mapeamento

Dentro desovar (), nós praticamos o fd_count e fd_map argumentos para chamar os descritores de arquivo. Ele especifica qual filho herdar.

O número usado como um descritor de arquivo para o processo filho depende de sua localização dentro do fd_map. Aqui, vamos considerar o exemplo do pai com descritores de arquivo com valores 1, 3 e 5, então o mapeamento será algo assim:

>> int fd_map = 1, 3, 5;
Para a criança Para o pai
0 1
1 3
2 5

Observe que se você estiver usando o explícito fd_map para combinar esses descritores de arquivo com o filho e o pai, então você deve mapear o SPWAN_FDCLOSE função para prosseguir.

Sinalizadores de herança

No Spawn, os usuários precisam chamar qualquer um dos seguintes sinalizadores em caso de herança. Alguns exemplos de sinalizadores de Spawn e suas descrições são fornecidos abaixo:

Bandeira Descrição
SPAWN_ALIGN_DEFAULT Este sinalizador é usado para definir as configurações padrão da configuração para alinhamento.
SPAWN_ALIGN_FAULT Este sinalizador é usado para desalinhamento de falha das referências de dados.
SPAWN_ALIGN_NOFAULT Este sinalizador é usado para corrigir o desalinhamento de falha.
SPAWN_DEBUG Este sinalizador é usado para depurar o kernel.
SPAWN_EXEC SPAWN atua como exec * () usando este sinalizador.
SPAWN_EXPLICIT_CPU Este sinalizador é usado para definir a máscara de execução e herdar o membro mask = máscara de execução.
SPAWN_EXPLICIT_SCHED Este sinalizador é usado para definir a política de agendamento.

O <desova.h> define aquela máscara SPAWN_ALIGN_MASK usado para alinhar as bandeiras listadas acima.

pid_t pgroup O grupo de processos filho se você especificar o SPAWN_SETGROUP no membro do sinalizador.
máscara interna A máscara de execução do processo filho para herdar as máscaras que são acordadas com base no valor deste membro.
sigset_t sigmask A máscara de sinal para o processo filho que é usada para especificar o status dos membros da bandeira.
sigset_t sigdefault O conjunto dos processos filhos dos sinais padrão.

Erros

O posix_spawn () e posix_spawnp () as funções também podem falhar em alguns casos, como os seguintes:

EINVAL: Este é o caso quando o valor identificado por file_actions ou atrito não é correto e adequado.

Quando a chamada subjacente fork (2), fork (2) ou clone (2) falha, o desovar () funções irão retornar um número de erro.

ENOSYS: Este é o caso se a função e seu suporte não estiverem incluídos ou fornecidos dentro de um sistema.

Conclusão

Este tutorial cobriu as funcionalidades básicas fornecidas por POSIX_spawn () e as funções usadas por ele para executar e realizar suas funções. Também cobrimos as sinalizações e erros comumente usados ​​pelo Spawn.

WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...
O botão esquerdo do mouse não funciona no Windows 10
Se você estiver usando um mouse dedicado com seu laptop ou computador desktop, mas o o botão esquerdo do mouse não funciona no Windows 10/8/7 por algu...
O cursor pula ou se move aleatoriamente enquanto digita no Windows 10
Se você descobrir que o cursor do mouse pula ou se move por conta própria, de forma automática e aleatória ao digitar em um laptop ou computador com W...