Linux System chama em C no OSX

1

Então eu fiz um teste rápido e

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main (int argc, char *argv[]) {
        printf("Hello World\n");
        printf("%d\n",getpid());
}

compilado com o gcc no meu macbook pro executando impressões do OSX 10.9.5

Hello World
640

Como eu esperaria na maioria das distribuições de Linux. Eu sei que o kernel do darwin é baseado no UNIX, mas todas as chamadas do sistema linux se comportam exatamente da mesma maneira no OSX, como acontece no Ubuntu? (Eu estou ciente de que o pid é diferente vezes diferentes do tempo que eu corro será diferente, mas não é disso que eu estou realmente falando aqui). Eu também tenho o Ubuntu instalado em uma pequena partição do meu SSD, então se a resposta for não, tudo bem.

    
por asky 03.09.2015 / 04:48

2 respostas

6

Eu diria que é enganoso chamar getpid() a "chamada do sistema linux". Isso dá a impressão de que é uma chamada de sistema específica do Linux , o que não é. Na verdade, getpid() e muitas outras chamadas do sistema são especificadas pelo POSIX, e você a encontrará implementada no Linux e no MacOS e em muitos outros sistemas, com comportamento idêntico.

A maioria das chamadas do sistema ou até mesmo as funções da biblioteca C que você usará no software típico são especificadas por padrões como POSIX e ANSI C, e você as implementará com o mesmo comportamento em muitos sistemas operacionais diferentes. O software portátil é um software que mantém esse conjunto de chamadas e funções comuns do sistema amplamente disponíveis.

O Linux também possui chamadas de sistema específicas do Linux. O MacOS também possui chamadas de sistema específicas do MacOS. Nenhum desses funcionará no sistema operacional oposto, obviamente. Os manpages para tais chamadas de sistema geralmente chamam a atenção para o fato de que eles não são portáteis. Além disso, eles existem com frequência como detalhes de implementação de baixo nível e a maioria dos softwares não precisa usá-los, o que torna mais fácil manter a maioria dos softwares portáteis.

    
por 03.09.2015 / 05:04
2

O OS X é um sistema operacional UNIX certificado , garantindo que ele implemente o padrão POSIX. O Linux, embora não seja um UNIX certificado, também implementa o padrão POSIX. Se você limitar suas chamadas de API a itens que fazem parte do POSIX, você deverá ter um comportamento consistente entre o OS X e o Linux. Além do POSIX, a biblioteca padrão C também é padronizada e você deve ter o mesmo comportamento entre o compilador e as plataformas (contanto que esteja em conformidade com o padrão).

A página getpid(2) man no Linux diz que está em conformidade com POSIX.1-2001, 4.3BSD e SVr4. A mesma página man no OS X 10.10 diz que está em conformidade com POSIX.1-1988.

    
por 03.09.2015 / 05:56