π©π» IoT (Embedded)/Raspberry Pi
[νμΌ μ²λ¦¬μ νμ€μ μΆλ ₯] νμΌ λμ€ν¬λ¦½ν°λ‘ open & read & write
μ§μ§μνμΉ΄
2024. 1. 2. 20:29
728x90
λ°μν
<μμμ§ λμ μ¬λ¬ΌμΈν°λ·μ μν 리λ μ€ νλ‘κ·Έλλ° with λΌμ¦λ² 리νμ΄ μμ μ μ°Έκ³ ν΄μ μμ±νμμ΅λλ€ :-)>
β νμΌ μ²λ¦¬μ νμ€ μ μΆλ ₯
// νλμ νμΌμ λ΄μ©μ λ€μ νμΌλ‘ 볡μ¬νλ μ½λλ₯Ό μμ±ν΄λ³΄μ
// 2κ°μ νμΌλͺ
μ μ
λ ₯λ°κ³ 2κ°μ νμΌμ μ΄κ±°λ μμ±ν ν 첫 λ²μ§Έ νμΌμμ λ°μ΄ν° μ½μ΄μ λ λ²μ§Έ νμΌλ‘ μ΄λ€
#include <unistd.h> // μ λμ€ νμ€ μμ€ν
μ½
#include <fcntl.h>
#include <stdio.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv) {
int n, in, out;
char buf[1024];
// λͺ
λ Ήν μΈμλ‘ λ³΅μ¬ν νμΌλͺ
μ΄ μλ κ²½μ°μ μλ¬ μΆλ ₯νκ³ μ’
λ£
if (argc < 3) {
// write() : μ΄λ¦° νμΌ λμ€ν¬λ¦½ν°λ₯Ό μ΄μ©ν΄μ νμΌμ λ°μ΄ν°λ₯Ό μ°λ©°, λ°μ΄ν°λ₯Ό μ΄ λ§νΌ νμΌ λ΄μ μ€νμ
μ¦κ°
// λ°μ΄ν°μ λ°μ΄ν° μ λ°ν 0 & μ€ν¨νλ©΄ -1
// (int fd: νμΌ λμ€ν¬λ¦½ν°, const void *buf: μΈ λ°μ΄ν°κ° μλ λ²νΌμ ν¬μΈν°ν λ³μ, size_t cnt: μ΅λ λ°μ΄νΈ μ)
write(2, "Usage : copy file1 file2\n", 25);
return -1;
}
// 볡μ¬μ μλ³Έμ΄ λλ νμΌμ μ½κΈ° λͺ¨λλ‘ μ°λ€
// open() : νμΌμ μ‘°μνκΈ° μν΄ ν΄λΉ νμΌ μ΄κΈ°
// (const char *path: μ΄ νμΌμ κ²½λ‘ μ§μ , int flags: νμΌμ μ΄ λ μ¬μ©ν μ μλ νλκ·Έ, mode_t mode *: νμΌ μμ±μ μ κ·Ό κΆν)
// O_RDONLY μ½κΈ° O_WRONLY μ°κΈ° O_RDWR μ½κΈ°/μ°κΈ°
if ((in = open(argv[1], O_RDONLY)) < 0) {
// 1) copy.c open ν΄μ read ν©λλ€.
perror(argv[1]);
return -1;
}
// 볡μ¬ν κ²°κ³Ό νμΌμ μ°κΈ° λͺ¨λ(μλ‘μ΄ νμΌ μμ± | κΈ°μ‘΄ νμΌ λ΄μ© μ§μ)λ‘ μ°λ€
if ((out = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) < 0) {
// 1) copy1.c open ν΄μ write ν©λλ€.
perror(argv[2]);
return -1;
}
// μλ³Έ νμΌμ λ΄μ©μ μ½μ΄μ 볡μ¬ν νμΌμ μ΄λ€
// read() : μ΄λ¦° νμΌ λμ€ν¬λ¦½ν°λ₯Ό μ΄μ©ν΄μ νμΌλ‘λΆν° λ°μ΄ν° μ½μ΄λ€μ (λ°μ΄ν° μ½μ λ§νΌ νμΌ λ΄μ μ€νμ
μ¦κ°) & λ²νΌλ‘ μ½μ΄λ€μΈ λ°μ΄ν°μ λ°μ΄νΈ μ λ°ν
// λ°μ΄ν°μ λ°μ΄ν° μ λ°ν & νμΌμ λ λ§λλ©΄ 0 & μ€ν¨νλ©΄ -1
// (inf fd: μ½κ³ μΆμ νμΌ λμ€ν¬λ¦½ν°, void *buf: μ½μ΄ λ€μΈ λ°μ΄ν°λ₯Ό μ μ₯νλ λ²νΌμ ν¬μΈν°ν λ³μ, size_t cnt: μ΅λ λ°μ΄νΈ μ)
while ((n = read(in, buf, sizeof(buf))) > 0) {
write(out, buf, n);
}
// => in μΌλ‘ read()λ₯Ό μ΄μ©ν΄ λ°μ΄ν°λ₯Ό μ½κ³ out μΌλ‘ write()λ₯Ό μ΄μ©ν΄ μ½μ λ°μ΄ν°λ₯Ό μ΄λ€
// μ΄λ¦° νμΌλ€ λ«λλ€
// close() : μ΄λ¦° νμΌμ λ«κΈ° & νμΌ λ«κΈ° μ±κ³΅νλ©΄ 0 μ€ν¨νλ©΄ -1
// (int fd: νμ¬ μ΄λ € μλ νμΌ λμ€ν¬λ¦½ν°)
close(out);
close(in);
// νλ‘κ·Έλ¨μ μ μ μ’
λ£ μ 0μ λ°ν
return 0;
}
/*
gani@gani:~/raspi/File $ gcc -o copy copy.c
gani@gani:~/raspi/File $ ./copy copy.c copy1.c
gani@gani:~/raspi/File $ ls -al copy*.c
-rw-r--r-- 1 gani gani 2774 1μ 2μΌ 20:22 copy.c
-rw------- 1 gani gani 2774 1μ 2μΌ 20:23 copy1.c
copy1.c μ copy.c 볡μ¬λ νμΌμ΄ μμ±λμ΄ μλ€
*/
gcc -o copy copy.c
./copy copy.c copy1.c
ls -al copy*.c
728x90
λ°μν