qual é o descritor de arquivo do meu terminal

1

Eu preciso usar a função tcsetgrp para tornar meu processo de segundo plano em primeiro plano, mas o parâmetro de tcsetgrp é um descritor de arquivo associado ao meu terminal. Qual é o file descriptor do meu terminal ou seu valor int?

EDITADO

De acordo com os comentários abaixo, aqui está o trecho do meu programa.

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void sig_handler(int sig){

    printf("The grp get signal is  %d\n",tcgetpgrp(0));
}
int main(){

    printf("The controllling terminal is %d\n",tcgetpgrp(0));
    pid_t pid=fork();
    if(pid>0){
        signal(SIGINT,sig_handler);
        setpgid(pid,pid);
        tcsetpgrp(0,getpgid(pid));
        //tcsetpgrp(1,getpgid(pid));
        printf("Wait is over on %d",wait(NULL));
        tcsetpgrp(0,getpgid(getpid()));
        //tcsetpgrp(1,getpgid(getpid()));
        printf("The parent got control\n");
        while(1)
            //sleep(1);
            printf("Hello\n");

        return 0;
    }
    else{
        printf("The controllling terminal is %d\n",tcgetpgrp(0));
        printf("The controllling terminal is %d\n",tcgetpgrp(1));
        execlp("cat","cat",NULL);
    }
    return 0;

}

Aqui, o programa cat é o primeiro plano e tudo está funcionando bem.Eu sou capaz de ler do console de entrada e enviar para o console de saída.Mas o problema surge quando eu pressiono *cntrl-c* meu processo de primeiro plano (cat) mas meu pai é incapaz de obter o controle do terminal mesmo que eu tenha mencionado tcsetpgrp(0,getpid()) após wait() .Meu prompt de shell vem e meu pai permanece como processo em segundo plano

    
por Kalu 12.08.2015 / 16:41

2 respostas

1

Existem algumas maneiras de obter os descritores de arquivos:

  • Você pode executar algo como: lsof -p $$ | grep /dev/pts ou
  • ls /proc/$$/fd

Os descritores de arquivo 0 (stdin), 1 (stdout) e 2 (stderr) são todos os FDs padrão usados por todos os programas.

    
por 12.08.2015 / 16:49
1

No seu programa, por padrão os descritores de arquivos 0 (stdin), 1 (stdout) e 2 (stderr) serão associados ao terminal, a menos que você use redirecionamento ou pipes no comando que você usa para invocar o programa. / p>     

por 12.08.2015 / 18:07