从变量读取值

时间:2014-01-15 18:03:25

标签: c

我正在尝试为msg分配字​​符串或int,以便稍后将其发送到服务器。此代码在客户端。

  char msg[100];
    int a;
    .
    .
    .
      bzero (msg, 100);
      printf ("[client]your message: ");
      fflush (stdout);
      read (0, msg, 100);

      /* sending message to server */
      if (write (sd, msg, 100) <= 0)
        {
          perror ("[client]Error write() to server.\n");
          return errno;
        }

我的问题是如何发送变量'a',而不是从命令行写一条消息。

2 个答案:

答案 0 :(得分:1)

sprintf(msg, "%d\n", a);
...
write(sd, msg, strlen(msg));

这假设客户端期望一个数字字符串(表示一个整数)后跟一个换行符。我随意选择了换行符分隔符,但你必须有某些约定,服务器通过该约定知道你发送了什么。

答案 1 :(得分:0)

我认为你对程序中发生的事情感到有些困惑。首先,让我们从write()开始。

write()功能的签名如下:

ssize_t write(int fd,            // a file descriptor 
              const void *buf,   // a void * containing the payload
              size_t count       // the number of bytes of data to write
             ); 

所以你现在拥有的是:

  read (0, msg, 100);  // read from stdin a ascii message up to 100 bytes

  /* sending message to server */
  if (write (sd, msg, 100) <= 0)  // write to a file descriptor (sd) the message
                                  // if it works, it should return the number of bytes
                                  // written

据我所知,你所说的是你要发送整数a而不是char缓冲区msg。这很容易做到:

int a = 0;
write(sd, &a, sizeof(a)); // send over the file descriptor "sd"
                          // you need a pointer for the second variable so use the &
                          // to get the address of a, then you need to identify
                          // the number of bytes to send, so use the sizeof macro

那将在套接字上发送一个整数。

对于多字节值(例如整数),您可能需要小心使用此方法的字节序问题。从这个角度来看,你可能更好地使用一组字符(在值中移位),这样你就知道在另一端会发生什么。


非常生硬:

int a = rand();      // a random integer (assuming required headers and proper seeding)
char *msg = "Hello"; // a string

write(sd, &a, sizeof(a));       // write the integer
write(sd, msg, strlen(msg)+1);  // write a string (strlen + 1 for the null terminator)