Passar argumentos para o executável Unix no terminal Mac

0

Sou muito novo no código Unix e gostaria de trabalhar em alguns projetos de rede simples. Eu encontrei alguns tutoriais que são exatamente o que eu estou procurando - este em particular: link .

Eu descobri como compilar os arquivos server e client c em executáveis, e posso executá-los no terminal da seguinte forma:

open server
open client

desde que eu esteja usando o Mac OS X 10.7.5. Meu problema é que eu preciso passar argumentos para esses programas quando eu inicializá-los. O tutorial usa este código:

server 51717
client clientName 51717

mas não encontrei uma maneira de replicar isso no meu terminal Mac.

open server --args 51717 //doesn't work

Eu encontrei este postar e criou um applescript com este código

do shell script "open -a /Desktop/server --args 51717"

mas isso gera muitos erros. Eu tentei muitas variações, mas não consegui executar. Também não consegui usar o exemplo do Chrome nessa postagem (não tenho o FF instalado).

Como faço para passar um número de porta inteiro simples como um argumento para o programa como no tutorial? Isso é mais fácil de fazer em uma máquina Linux? Eu não tenho nenhum problema em mudar o sistema operacional neste momento, e seria ideal se eu pudesse usar a sintaxe 'server 51717' que o tutorial usa em vez de ter que criar um script de execução separado para cada programa. Procurando por uma resposta e conselhos. Obrigado.

EDITAR:

Eu consegui que funcione corretamente, mas algumas coisas ainda não funcionam direito. Eu inicio o servidor assim:

$ ./server 3456

abra um novo terminal e inicie o cliente com sucesso limitado:

$ ./client mClient 3456
ERROR, no such host
$ ./client 127.0.0.1 3456
Please enter the message: //running correctly
//... this also works
$ ./client 127.1 3456
Please enter the message: //running correctly

Eu posso iniciar o cliente com algumas combinações number.number, mas não funciona para todas elas e não posso usar nenhuma letra. Por que apenas uma dessas soluções funciona?

SOLUÇÃO:

$ sudo nano /private/etc/hosts

adicione 127.0.0.1 mClient ao final e pressione Ctrl ^ o para salvar

Agora isso funciona:

$ ./client mClient 3456
    
por Cbas 05.04.2013 / 09:59

2 respostas

1

Compile o código:

$ gcc client.c -o client
$ gcc server.c -o server

Execute o servidor sem argumentos:

$ ./server
ERROR, no port provided

Execute o servidor com um argumento:

$ ./server 3456

Em um terminal diferente:

$ ./client 3456
usage ./client hostname port  

uma mensagem de uso indica como executar um binário, ou seja, quais argumentos dar a ele

$ ./client eee.lan 3456
Please enter the message:

desde que o servidor esteja escutando em todas as interfaces, você também pode usar

$ ./client 127.0.0.1 3456
Please enter the message: Hello World!
I got your message

então argumentos são strings que seguem o comando. No exemplo do gcc existem 3 argumentos: server.c -o server

a parte relevante do código é (servidor):

portno = atoi(argv[1]);

argv é o vetor (matriz) que contém todos os argumentos dados a um comando no prompt de comando. atoi converte uma string para um inteiro.

    
por 05.04.2013 / 16:50
1

Basta executar o binário diretamente do console - usando o open no meu MacBook (10.8.4) binários "arbitrários" não podem ser abertos a partir de aberto (aberto destina-se a usar um descritor de arquivo para abrir um arquivo no aplicativo apropriado ).

Então, por exemplo, se os seus binários de servidor e cliente estiverem na área de trabalho (~ / Desktop), eles poderão ser executados a partir do console com:

~/Desktop/server 51717
~/Desktop/client clientName 51717

Ou localmente no diretório do Google Desktop:

cd ~/Desktop
./server 51717
./client clientName 51717

Este é exatamente o mesmo comportamento que você veria no Linux (ou qualquer outro sistema * ix).

Observe que os arquivos precisariam ser marcados como executáveis, mas o compilador normalmente fará isso por você.

Boa sorte!

    
por 05.04.2013 / 12:27