Tag: 连接

隐式函数声明和链接

最近我在C中学习了隐式函数声明。 主要观点很明确,但在这种情况下我对理解联系过程有些麻烦。 请考虑以下代码(文件ac ): #include int main() { double someValue = f(); printf(“%f\n”, someValue); return 0; } 如果我尝试编译它: gcc -c ac -std=c99 我看到关于函数f()隐式声明的警告。 如果我尝试编译和链接: gcc ac -std=c99 我有一个未定义的引用错误。 一切都很好。 然后我添加另一个文件(文件bc ): double f(double x) { return x; } 并调用下一个命令: gcc ac bc -std=c99 令人惊讶的是,一切都成功地联 当然在./a.out调用后我看到了垃圾输出。 所以,我的问题是:如何将隐式声明函数的程序链接起来? 在编译器/链接器的引擎下我的例子会发生什么? 我读了很多关于SO的话题, 这个和这个但仍然有问题。

在C中连接字符串的安全方法是什么?

我需要从两个字符串构造一个文件的路径。 我可以使用它(虽然没有经过测试): /* DON’T USE THIS CODE! */ /* cmp means component */ char *path_cmp1 = “/Users/john/”; char *path_cmp2 = “foo/bar.txt”; unsigned len = strlen(path_cmp1); char *path = path_cmp1; for (int i = 0; i < strlen(path_cmp2); i++) { path[len + i] = path_cmp2[i]; } 但这可能会导致内存损坏。 有没有更好的方法来做到这一点,或者标准库中是否有这样的function?

在C中连接hex数

我一直试图连接4个hex数字,似乎无法做到这一点。 例: int a = 0x01; int b = 0x00; int c = 0x20; int d = 0xF1; //Result should be 0x010020F1 我使用sprintf和按位操作得到的结果总是切断零,给我1020F1这样的答案,这与我想要的大不相同。 有谁有更好的方法?

strcat()用于格式化字符串

我正在我的程序中逐个构建一个字符串,当我在末尾添加一个简单的字符串时,我正在混合使用strcat(),但是当我添加一个格式化字符串时,我正在使用sprintf()例如: int one = 1; sprintf(instruction + strlen(instruction), ” number %d”, one); 是否可以使用strcat()连接格式化的字符串或者首选方法是什么?

检查sockets是否已连接

我有一个应用程序需要在某个时间将一些数据发送到服务器。 简单的方法是关闭连接,然后在我想要发送内容时再次打开它。 但我想保持连接打开,所以当我想发送数据时,我首先使用此函数检查连接: bool is_connected(int sock) { unsigned char buf; int err = recv(sock,&buf,1,MSG_PEEK); return err == -1 ? false : true; } 不好的是,这不起作用。 当没有数据要接收时它会挂起。 我能做什么? 如何检查连接是否仍然打开?

使用POSIX消息队列而不是TCP套接字 – 如何建立“连接”?

我有客户端和服务器程序,现在通过TCP进行通信。 我正在尝试使用POSIX消息队列(当然,在客户端和服务器位于同一台机器上的情况下)。 我希望它能提高性能(特别是通过减少延迟)。 我已经解决了大部分问题,但我不确定一件事:如何建立“连接”。 服务器同时接受来自多个客户端的连接,所以我很想模仿TCP连接建立过程,如下所示: 服务器打开一个具有已知名称的队列并连续读取它(它可以像使用TCP一样使用select(2) )。 客户端打开三个队列:两个具有任意名称(包括一些唯一性,例如PID以避免冲突),以及一个具有服务器使用的已知名称的队列。 客户端向服务器的队列发送“连接”消息,包括客户端的队列名称(一个指定用于客户端到服务器的流量,另一个指定用于反向)。 服务器打开客户端连接消息中指定的队列,并开始从客户端到服务器读取(选择)。 客户端使用众所周知的名称关闭服务器队列。 使用客户端命名的两个队列(每个方向一个)进行双向通信。 您可能会看到此方案与常见的TCP方法类似,这并非偶然。 但是,我想知道: 你能想到更好的方法吗? 你看到我的方法有任何潜在的问题吗? 您是否有任何其他想法,包括在同一台计算机上使用消息队列而不是TCP实际上可以提高性能(延迟)的可能性? 请记住,之前我没有使用POSIX消息队列(我之前使用过IBM WebSphere MQ,但这有点不同)。 该平台是Linux。

释放malloc不会删除char数据

我做了一个更大问题的小方案。 我尝试做的是将一个字符串传递给一个函数,该函数将从中生成一个新的字符串。 但是我遇到了一些问题。 我已将字符串定义为 typedef char string[1024]; 然后我有一个函数,它接受一个字符串并生成一个新的字符串,用旧的字符串和一个点字符填充 string* add_sth_to_string(char* msg){ string* newStr=malloc(sizeof(string)); // malloc a newStr strcpy(*newStr, msg); // copying msg to newStr char buff[1024]; // making a buffer strcat(buff, “.”); // adding a dot to buffer strcat(buff, *newStr); // adding msg to buffer strcpy(*newStr, buff); // copying buffer to newStr return newStr; } […]

你如何在C中连接字符串?

可能重复: 如何在C中连接2个字符串? #include #include /* Function prototypes */ void wordLength ( char *word ); void wordConcat ( char *wordC1, char *wordC2); int main (void) { int choice; char word [20]; char wordC1 [20]; char wordC2 [20]; printf( “Choose a function by entering the corresponding number: \n” “1) Determine if words are identical\n” “2) Count number […]

连接到套接字时似乎无法使超时工作

我正在尝试为connect()提供超时。 我四处搜寻,发现了几篇与此相关的文章。 我编写了我认为应该工作的内容,但不幸的是我没有从getsockopt()报告错误。 但是当我来到write()时,它失败了,错误是107 – ENOTCONN。 几点。 我在Fedora 23上运行.connect()的文档说它应该返回失败的EINPROGRESS错误,因为连接尚未完成但是我遇到了EAGAIN所以我将其添加到我的支票中。 目前我的套接字服务器在listen()调用中将backlog设置为零。 许多调用成功但是那些失败的调用都失败了107 – 我在write()调用中提到的ENOTCONN。 我希望我只是遗漏了一些东西,但到目前为止还无法弄清楚是什么。 int domain_socket_send(const char* socket_name, unsigned char* buffer, unsigned int length, unsigned int timeout) { struct sockaddr_un addr; int fd = -1; int result = 0; // Create socket. fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1) { result = -1; […]

在C中连接字符串

我想知道是否有办法为字符串添加值,而不是像1 + 1 = 2但像1 + 1 = 11。