[소켓프로그래밍] C언어 공부중에 막혀서 질문 드립니다. (남은 용량 구하기)

맙소사의 이미지

안녕하세요.

엔지니어 일을 하다가 한계가 느껴져서 뒤늦게 C언어 공부를 시작한 초보 입니다.

좋지 않은 머리로 혼자 공부하려니 매우 힘드네요.

지금 제가 만들고 있는건, 리눅스 vi에서 코딩하고 gcc로 컴파일 하고 있습니다.

- 5대의 서버에서 각각의 잔여 용량을 구하고, 용량이 많아 있는 것을 선택한 후 클라이언트에게 IP와 용량 정보를 전달해 준다.

이런 프로그램을 만들고 있습니다. 책에 나와있는 소스에다가 인터넷에서 따온 소스를 더했는데, 제대로 작동하지를 않습니다.

각각 문법상, 기능상 전혀 문제없는 소스와 함수였는데, 껴넣어버리니 문제가 생겨버리네요..;;

기초가 많이 부족해서 어느 부분부터 손을 봐야할지 통 모르겠습니다.

약간의 조언과 방향을 지적해 주시면 해결책을 찾는데 있어서 큰 도움이 될것 같습니다. 감사합니다.

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <arpa/inet.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <sys/statvfs.h>
  #include <glib.h>
 
 
  void error_handling(char *message);     
 
  gchar * g_get_capacity (gchar * dev_path);     // 전체 용량 확인 (dev_path: 구할 용량의 경로)
  gchar * g_get_free_space (gchar * dev_path);   // 남은 용량 확인
 
  int main(int argc, char **argv)
  {
          //소켓 생성 및 연결 정보
          int serv_sock;
          int clnt_sock;
          struct sockaddr_in serv_addr;
          struct sockaddr_in clnt_addr;
          int clnt_addr_size;
          char message[]="116.120.058.130\n";
 
                  if(argc!=2){
                          printf("Usage : %s <port>\n", argv[0]);
                          exit(1);
          }
          // 소켓 생성
          serv_sock=socket(PF_INET, SOCK_STREAM, 0);
          if(serv_sock == -1)
                  error_handling("socket() error");
 
                  //소켓 생성 정보
                  memset(&serv_addr, 0, sizeof(serv_addr));
                  serv_addr.sin_family=AF_INET;
                  serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
                  serv_addr.sin_port=htons(atoi(argv[1]));
 
          // 소켓 바인드 함수
          if( bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1 )
                          error_handling("bind() error");
 
          // 클라이언트 연결 대기
          if( listen(serv_sock, 5)==-1 )
                          error_handling("listen() error");
 
          clnt_addr_size=sizeof(clnt_addr);
          clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size);
          if(clnt_sock==-1)
                  error_handling("accept() error");
 
          unsigned long long result =0;
          int n;
          gchar s_cap[50];
          gchar * ss_cap = "N/A";
          struct statvfs sfs;
          if (ststvfs (dev_path, &sfs) != -1)
          {
                  result=(unsigned long long)sfs.f_bsize * sfs.f_blocks;
          }
          if (result > 0)
          {
                  double f_cap = (double)result/(1024*1024);
                  n = sprintf(s_cap, "%.2f Mb", f_cap);
                  ss_cap = g_strdup (s_cap);
          }
          return ss_cap;
 
         write(clnt_sock, message, sizeof(message));
 
         close(clnt_sock);
 
 return 0;
 }
 
 void error_handling(char *message)
 {
         fputs(message, stderr);
         fputc('\n', stderr);
         exit(1);
 }

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.