open vs fopen em C
-
Use a função
fopen
para abrir ou criar um arquivo em C -
Use a função
open
para abrir ou criar um arquivo em C -
Use a função
creat
para abrir e criar um arquivo
Este artigo irá demonstrar vários métodos sobre o uso de funções open
vs fopen
em C.
Use a função fopen
para abrir ou criar um arquivo em C
fopen
é a função de biblioteca padrão C para lidar com a abertura de arquivos como objetos de fluxo. Em contraste com a função open
, que é intrinsecamente uma chamada de sistema, fopen
associa o objeto de ponteiro FILE
ao arquivo fornecido. Leva dois argumentos; o primeiro representa um nome de caminho para o arquivo a ser aberto, e o segundo argumento o modo em que o arquivo deve ser aberto.
Observe que fopen
tem vários valores predefinidos para o parâmetro de modo, todos os quais são detalhados no manual de funções página. No código de exemplo a seguir, especificamos o modo w+
, que abre o arquivo para leitura e gravação junto com o truncamento do conteúdo e o posicionamento do fluxo no início. Observe que, se o caminho de função fornecido não existir, a chamada criará um novo arquivo para gravação.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
FILE* output_file = fopen(filename, "w+");
if (!output_file) {
perror("fopen");
exit(EXIT_FAILURE);
}
fwrite(str, 1, strlen(str), output_file);
printf("Done Writing!\n");
fclose(output_file);
exit(EXIT_SUCCESS);
}
Resultado:
Done Writing!
Use a função open
para abrir ou criar um arquivo em C
Em contraste, a função open
é essencialmente um serviço de sistema de nível inferior chamado mesmo quando fopen
é usado. Observe que as chamadas do sistema geralmente são fornecidas aos usuários finais com funções de wrapper da biblioteca C, mas suas características e casos de uso de desempenho diferem daqueles na biblioteca C stio
. Por exemplo, open
recebe o segundo argumento como tipo int
e o terceiro argumento opcional especificando bits de modo de arquivo quando um novo arquivo é criado. No exemplo a seguir, demonstramos a funcionalidade semelhante à do código de amostra anterior.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = open(filename, O_RDWR | O_CREAT);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
A chamada open
cria um novo descritor de arquivo e retorna seu valor para o chamador; caso contrário, -1
é retornado em caso de falha e errno
é definido de acordo. O próximo exemplo de código mostra a chamada open
com o argumento de modo opcional especificando S_IRWXU
. Esses símbolos são macros definidos no cabeçalho <fcntl.h>
e denotam os diferentes sinalizadores de permissão do arquivo. S_IRWXU
implica que o proprietário do arquivo terá permissões de leitura / gravação / execução em um arquivo recém-criado.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = open(filename, O_CREAT | O_WRONLY | O_APPEND, S_IRWXU);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
Use a função creat
para abrir e criar um arquivo
Outra chamada de sistema incluída com open
é a função creat
, que pode ser usada especificamente para criar um novo arquivo ou, se o arquivo já existir, truncar para comprimento zero. Observe que esta função é essencialmente igual à chamada open
com os seguintes argumentos - O_CREAT | O_WRONLY | O_TRUNC
. Assim, leva apenas dois argumentos em comparação com open
, omitindo o segundo argumento sinalizadores.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = creat(filename, S_IRWXG);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook