Qual é a diferença entre uma chamada de função e uma chamada do sistema em c?

Chamada de sistema é a maneira programática pela qual um programa solicita um serviço do kernel do sistema operacional no qual é executado.

Chamada de sistema é uma chamada para uma sub-rotina incorporada ao sistema, enquanto uma chamada de função é uma chamada para uma sub-rotina dentro do programa. Diferentemente das chamadas de função, as chamadas do sistema são usadas quando um programa precisa executar alguma tarefa, para a qual não tem privilégio. As chamadas do sistema são pontos de entrada no kernel do sistema operacional e não estão vinculadas ao programa (como chamadas de função). Diferentemente das chamadas do sistema, as chamadas de função são portáteis.

As chamadas do sistema são executadas no espaço de endereço do kernel, enquanto as chamadas de função são executadas no espaço de endereço do usuário. Portanto, o tempo necessário para executar a chamada do sistema é mais porque envolve a troca do espaço atual do usuário para o espaço do kernel e o retorno após a execução, enquanto a chamada Function é executada em próprio espaço do usuário, portanto, não é necessário alternar o espaço de endereço.

Uma chamada do sistema é uma chamada para o código do kernel, normalmente executada executando uma interrupção. A interrupção faz com que o kernel assuma o controle e execute a ação solicitada e, em seguida, devolva o controle ao aplicativo. Essa alternância de modo é o motivo pelo qual as chamadas do sistema são mais lentas para executar do que uma função equivalente no nível do aplicativo.

fopen é uma função da biblioteca C que, internamente, executa uma ou mais chamadas do sistema. Geralmente, como programador C, você raramente precisa usar chamadas do sistema porque a biblioteca C as agrupa para você.