ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
ÆÄÀÏ ´Ù·ç±â
Unix ´Â ¸ðµç°ÍÀÌ ÆÄÀÏ·Î ÀÌ·ç¾îÁø´Ù. ÀϹÝÀûÀÎ ÅØ½ºÆ® Á¤º¸, ¹ÙÀ̳ʸ® Á¤º¸ »Ó¸¸ ¾Æ´Ï¶ó, ¼ÒÄÏ, ÆÄÀÌÇÁ(FIFO), ÀåÄ¡(device), µð·ºÅ丮±îÁö ÆÄÀÏ·Î °ü¸®¸¦ ÇÑ°Ô µÈ´Ù. ÀÌ·¯ÇÑ °³³äÀº Window »ç¿ëÀÚ¿¡°Ô´Â »ý¼ÒÇÑ °³³äÀÌ µÉ¼ö°¡ ÀÖ´Ù.
À©µµ ÀÖ¾î¼ c: µå¶óÀ̺갡 Unix »ó¿¡¼´Â /dev/hda1 À̶ó´Â ÆÄÀÏ·Î µÇ¾îÀÖ´Ù´Â Á¡ ÀÚü°¡ óÀ½ Unix ¸¦ Á¢ÇÏ´Â »ç¿ëÀÚ¿¡°Ô´Â ¸Å¿ì È¥µ¿µÇ´Â °³³äÀ¸·Î ´Ù°¡¿Â´Ù. ÀÌ·¸µí ¸ðµç°ÍÀÌ ÆÄÀÏ·Î °ü¸®µÈ´Ù´Â °³³äÀÌ Ã³À½¿¡´Â È¥¶õÀ» °¡Á®´ÙÁÙ¼ö ÀÖÁö¸¸, µ¿ÀÏÇÑ Á¢±Ù ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇØÁֹǷΠÁ¶±Ý¸¸ Àͼ÷ÇØÁö¸é ¸Å¿ì ÈǸ¢ÇÑ °³³äÀ̶õ°É ¾Ë°Ô µÉ°ÍÀÌ´Ù. == ÆÄÀÏ ¿±â== ÆÄÀÏÀ» ¿±â À§Çؼ´Â open() ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ´ÙÀ½Àº ÆÄÀÏÀ» º¹»çÇØÁÖ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À¸·Î, ¾î¶»°Ô ÆÄÀÏÀ» ¿¾î¼, ±×³»¿ëÀ» ÀÐ°í ¾²´ÂÁö¿¡ ´ëÇÑ ³»¿ëÀ» ´ã°í ÀÖ´Ù.
¿¹Á¦ : echo_file.c #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h> int main(int argc, char **argv) { int fd_in, fd_out; int n; char line[255]; if (argc != 3) { printf("Usage : ./echo_file [¿øº»ÆÄÀÏÀ̸§] [º¹»çÆÄÀÏÀ̸§]\n"); exit(0); } // ¿øº»ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö, // µ¿ÀÏÇÑ À̸§ÀÇ º¹»çÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÑ´Ù. if (access(argv[1], F_OK) != 0) { printf("ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½ : %s\n", argv[1]); exit(0); } if (access(argv[2], F_OK) == 0) { printf("ÀÌ¹Ì ÆÄÀÏÀ̸§ÀÌ Á¸ÀçÇϰí ÀÖÀ½ : %s\n", argv[2]); exit(0); } // ¿øº»ÆÄÀÏ Àбâ Àü¿ëÀ¸·Î ¿±â if ((fd_in = open(argv[1], O_RDONLY)) < 0) { perror("file open error"); exit(0); } // º¹»çÆÄÀÏÀ̸§À» ¾²±âÀü¿ëÀ¸·Î ¿±â if ((fd_out = open(argv[2], O_WRONLY|O_CREAT)) < 0) { perror("file open error"); exit(0); } memset(line, '\0', 255); while ( (n = read(fd_in, line, 255)) > 0) { write(fd_out, line, n); memset(line, '\0', 255); } close(fd_in); close(fd_out); }
ÇÁ·Î±×·¥À» ½ÃÀÛÇÏ°Ô µÇ¸é, °¡Àå¸ÕÀú access(2) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ º¹»çÇϰíÀÚ ÇÏ´Â ÆÄÀÏÀÌ ÀÖ´ÂÁö, ±×¸®°í º¹»ç½Ãų ÆÄÀϸíÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ °Ë»çÇÑ´Ù. access() ÇÔ¼ö´Â ÆÄÀÏÀÇ »ç¿ëÀÚ ±ÇÇѰú ÆÄÀÏÁ¸Àç ¿©ºÎ¸¦ Å×½ºÆ® Çϱâ À§Çؼ ¾²À̴µ¥, ¾Æ±Ô¸ÕÆ®·Î Å×½ºÆ®ÇÒ ÆÄÀϸí°ú, Å×½ºÆ® ¸ðµå¸¦ ÀÔ·ÂÇÑ´Ù.
Å×½ºÆ® ¸ðµå´Â R_OK, W_OK, F_OK, X_OK °¡ Àִµ¥, Â÷·Ê´ë·Î "ÀбⰡ´É", "¾²±â°¡´É", "ÆÄÀÏÀÎÁö", "½ÇÇà°¡´É" ¿©ºÎ¸¦ Å×½ºÆ® ÇÏ°Ô µÈ´Ù. ÇØ´ç ¸ðµå¿¡ ´ëÇØ¼ ÂüÀ̶ó¸é 0À» ¹ÝȯÇÏ°Ô µÈ´Ù.
±×´ÙÀ½¿¡ open(2) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ¿øº»ÆÄÀÏÀ» Àбâ Àü¿ëÀ¸·Î ¿°í, º¹»çÆÄÀÏÀ̸§À» ¾²±âÀü¿ëÀ¸·Î ¿¬´Ù. º¹»çÆÄÀÏÀ» ¿¶§ O_CREATE ¸¦ ÀÌ¿ëÇØ¼ ÆÄÀÏÀ» »õ·Î »ý¼º ½ÃÄ×À½À» ÁÖ¸ñÇ϶ó. open() ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é, int ÇüÀÇ ÆÄÀÏÁö½ÃÀÚ ¸¦ µÇµ¹·Á Áִµ¥, ÀÌ ÆÄÀÏÁö½ÃÀÚ¸¦ ÅëÇÏ¿©¼ ÆÄÀÏÀ» Á¶ÀÛÇÏ°Ô µÈ´Ù. open() À» ÅëÇÏ¿© ÆÄÀÏÀ» ¿¶§¿¡´Â ÆÄÀÏÀ» Àбâ Àü¿ëÀ¸·Î ¿Áö(O_RDONLY), ¾²±âÀü¿ëÀ¸·Î ¿Áö(O_WRONLY), Àбâ¹× ¾²±âÀü¿ëÀ¸·Î ¿Áö(O_RDWR)µîÀ» ÁöÁ¤ÇÒ¼ö ÀÖ´Ù. ±×¹ÛÀÇ ´Ù¾çÇÑ ¿±â »óŸ¦ ÁöÁ¤ÇÒ¼ö Àִµ¥, ÀÌ´Â man ÆäÀÌÁö¸¦ Âü°í Çϱ⠹ٶõ´Ù.
open() À» ÅëÇØ¼ ÆÄÀÏ ¿±â¿¡ ¼º°øÇßÀ¸¸é read() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ¿øº»ÆÄÀÏ·Î ºÎÅÍ ÁöÁ¤µÈ ¹ÙÀÌÆ®¸¸ÅÀÇ ³»¿ëÀ» Àоî¿Í¼, º¹»ç½Ãų ÆÄÀÏ·Î write() ¸¦ ÀÌ¿ëÇØ¼ ³»¿ëÀ» ¾²°Ô µÈ´Ù.
¸ðµç ÀÛ¾÷À» ¸¶Ä¡°Ô µÇ¸é open() À» ÅëÇØ »ý¼ºµÈ ÆÄÀÏ Áö½ÃÀÚ¸¦ close() ½ÃÄÑÁØ´Ù. º¸Åë ÇÁ·Î¼¼½º(ÇÁ·Î±×·¥)ÀÌ Á¾·áÇÏ°Ô µÇ¸é, ÀÚµ¿ÀûÀ¸·Î open()µÈ ÆÄÀÏÁö½ÃÀÚ¸¦ ´Ý¾ÆÁÖ±â´Â ÇÏÁö¸¸, ÁÁÀº ÇÁ·Î±×·¡¹Ö ½À°üÀ» À§Çؼ ¹Ýµå½Ã close() ¸¦ ÅëÇØ¼ ÆÄÀÏÀ» ´Ý¾ÆÁֱ⠹ٶõ´Ù.
À̹ø¿¡´Â À§ÀÇ echo_file.c ÀÇ stream ¹öÁ¯À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ÆÄÀÏ ÀÛ¾÷¿¡´Â open, write, read À¸·Î ´ëÇ¥µÇ´Â ÀÏ·ÃÀÇ °è¿°ú, fopen(3), fgets, fputs ·Î ´ëÇ¥µÇ´Â stream °è¿Áß ÅÃÀÏ ÇØ¼ ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù.
ÀüÀÚ´Â ÆÄÀÏÀ» Àú¼öÁØ¿¡¼ ´Ù·ç°íÀÚ ÇÒ¶§ »ç¿ëÇϸç, ÈÄÀÚ´Â °í¼öÁØ¿¡¼ »ç¿ëÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇϴµ¥(À̸¦Å×¸é °£ÆíÇÏ°Ô »ç¿ëÇÒÀû¿¡), fopen °è¿À» ¾²¸é ÆÄÀÏÀ» line ´ÜÀ§·Î Àоî¿Ã¼ö ÀÖ°í, stream À» »ç¿ëÇÏ¿© ÆÄÀÏÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÒ¼ö ÀÖ¾î¼ ÆÄÀÏÀÇ Á¶ÀÛÀÌ °£ÆíÇÏÁö¸¸, open À» ¾µ°æ¿ì fopen À¸·Î °¡´ÉÇÑ ÀÛ¾÷À» À§Çؼ ÀÏÀÏÀÌ ÇÔ¼ö¸¦ ¸¸µé¾î¼ »ç¿ëÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù.
´Ü open °è¿À» »ç¿ëÇÒ°æ¿ì, fopen °è¿¿¡ ºñÇØ¼ ´õ ÁÁÀº ¼º´ÉÀ» º¸À̰í, ÆÄÀÏ ±â¼úÀÚ Á¶ÀÛ, select ³ª poll µîÀ» ÅëÇÑ ´ÙÁß ÀÔ/Ãâ·Â µî ÆÄÀÏÀ» ¼¼¹ÐÇÏ°Ô Á¶ÀÛÇÒ¼ö ÀÖ´Ù´Â ÀåÁ¡À» °¡Áø´Ù.
¿¹Á¦ : echo_file_f.c #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char **argv) { FILE *fp_in; FILE *fp_out; char buf_in[255]; if (argc != 3) { printf("Usage : ./echo_file [¿øº»ÆÄÀÏÀ̸§] [º¹»çÆÄÀÏÀ̸§]\n"); exit(0); } // ¿øº»ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö, // µ¿ÀÏÇÑ À̸§ÀÇ º¹»çÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÑ´Ù. if (access(argv[1], F_OK) != 0) { printf("ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½ : %s\n", argv[1]); exit(0); } if (access(argv[2], F_OK) == 0) { printf("ÀÌ¹Ì ÆÄÀÏÀ̸§ÀÌ Á¸ÀçÇϰí ÀÖÀ½ : %s\n", argv[2]); exit(0); } fp_in = fopen(argv[1], "r"); if (fp_in == NULL) { perror("file open error 1 : "); exit(0); } fp_out = fopen(argv[2], "w"); if (fp_out == NULL) { perror("file open error 2 : "); exit(0); } memset(buf_in, '\0', 255); while( fgets(buf_in, 255, fp_in) != NULL) { fputs(buf_in, fp_out); memset(buf_in, '\0', 255); } fclose(fp_in); fclose(fp_out); }ÀÌ ¿¹Á¦´Â ÀÌÀüÀÇ open À» ÅëÇÑ ¿¹Á¦¿Í fopen() °è¿ÀÇ ÇÔ¼ö¸¦ ½è´Ù´Â°Í À̿ܿ¡ º°·Î ƯÀÌÇÑ Á¡Àº ¾ø´Â ÇÁ·Î±×·¥ÀÌ´Ù.
´ÜÁö ÀÌ·¯ÇÑ ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ ±¸Çö°¡´ÉÇÏ´Ù´Â °ÍÀ» º¸¿©ÁÖ´Â ¿¹Á¦ÀÌ´Ù. ¸¶Áö¸·À¸·Î Ç¥ÁØÀÔ·ÂÀ» ¹Þ¾Æ¼ À̰ÍÀ» ÆÄÀÏ·Î ÀúÀåÇÏ´Â °£´ÜÇÑ ¶óÀÎ ¿¡µðÅÍ ÇÁ·Î±×·¥ ¿¹¸¦ µé¾îº¸°Ú´Ù.
¿¹Á¦ : line_edit.c
#include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char **argv) { FILE *fp_stdin; FILE *fp_out; char buf_in[255]; if (argc != 2) { printf("Usage : ./line_edit [ÀúÀåÆÄÀÏÀ̸§]\n"); exit(0); } if (access(argv[1], F_OK) == 0) { printf("ÀÌ¹Ì ÆÄÀÏÀÌ Á¸ÀçÇϰí ÀÖÀ½ : %s\n", argv[1]); exit(0); } fp_out = fopen(argv[1], "w"); if (fp_out == NULL) { perror("file open error 1 : "); exit(0); } while(fgets(buf_in, 255, stdin) != NULL) { if (strncmp(buf_in,"quit", 5) == 0) break; fputs(buf_in, fp_out); } fclose(fp_out); }ÇÁ·Î±×·¥Àº ¼³¸íÇÒ°Ô º°·Î ¾øÀ»Á¤µµ·Î °£´ÜÇÏ´Ù. ÀúÀåÇÒ ÆÄÀÏÀ̸§À» ¾Æ±Ô¸ÕÆ®·Î ÁÖ°í ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é »ç¿ëÀÚ ÀÔ·Â(stdin)À» ±â´Ù¸®´Â ÇÁ·ÒÇÁÆ®°¡ ¶ß°Ô µÇ°í, ¿øÇÏ´Â ¹®ÀÚ¿À» ÀÔ·ÂÇÏ¸é µÈ´Ù. ¸ðµç ÀÛ¾÷ÀÌ ³¡³µ´Ù¸é Ctrl+D ¸¦ ÀÔ·ÂÇϰųª, quit ¸¦ ÀÔ·ÂÇÏ´Â °ÍÀ¸·Î ÇÁ·Î±×·¥ÀÌ Á¾·áµÈ´Ù. [yundream@localhost test]# ./line_edit my_test6 hello world? okokok? I like C quit [yundream@localhost test]#
ÀÌ»óÀ¸·Î ÆÄÀÏÀÇ ÀÐ°í ¾²´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. ´ÙÀ½ Æí¿¡¼´Â ÆÄÀÏÀÇ »óŸ¦ ¾Ë¾Æº¸°í À̸¦ ¹Ù²Ù´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|