c文件编译

作者:芝麻馅汤圆儿日期:2025/11/16

随笔记录

目录

1.背景

2. 编译

2.1 创建 .c 文件

2.2 编译->执行


1.背景

c文件在编译为可执行程序

2. 编译

2.1 创建 .c 文件

1已知c 文件源码,创建 .c 文件并编译为可执行程序
2
3
41. creat  *.c 文件
5
6[root@localhost magx]# vim udp_nobind_sendto.c
7[root@localhost magx]# 
8[root@localhost magx]# cat udp_nobind_sendto.c
9// Client side implementation of UDP client-server model
10#include <stdio.h>
11#include <stdlib.h>
12#include <unistd.h>
13#include <string.h>
14#include <sys/types.h>
15#include <sys/socket.h>
16#include <arpa/inet.h>
17#include <netinet/in.h>
18
19#define PORT	 9000
20#define MAXLINE 1024
21
22// Driver code
23int main(int argc,char* argv[]) {
24	int sockfd;
25	char buffer[MAXLINE];
26	char *hello = "Hello from client.............................................";
27	struct sockaddr_in	 servaddr;
28	struct sockaddr_in servaddr1;
29	struct sockaddr_in cli;
30
31	// Creating socket file descriptor
32	if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
33		perror("socket creation failed");
34		exit(EXIT_FAILURE);
35	}
36
37	memset(&servaddr, 0, sizeof(servaddr));
38	memset(&servaddr1, 0, sizeof(servaddr1));
39	/*
40			// assign IP, PORT
41			cli.sin_family = AF_INET;
42			cli.sin_addr.s_addr = inet_addr("30.0.0.11");
43			cli.sin_port = htons(PORT);
44
45			// Binding newly created socket to given IP and verification
46			if ((bind(sockfd, (struct sockaddr *)&cli, sizeof(servaddr))) != 0)
47			{
48				printf("socket bind failed...\n");
49			}
50			else
51			{
52				printf("Socket successfully binded..\n");
53			}
54	*/
55	printf("sleep ....\n");
56	//sleep(1);
57	printf("sleep ...end\n");
58
59	// Filling server information
60	servaddr.sin_family = AF_INET;
61	servaddr.sin_port = htons(PORT);
62	servaddr.sin_addr.s_addr = inet_addr("10.1.1.9");
63
64	servaddr1.sin_family = AF_INET;
65	servaddr1.sin_port = htons(PORT);
66	servaddr1.sin_addr.s_addr = inet_addr("10.2.1.9");
67
68	int n, len;
69
70	sendto(sockfd, (const char *)hello, strlen(hello),
71		MSG_CONFIRM, (const struct sockaddr *) &servaddr,
72			sizeof(servaddr));
73	sendto(sockfd, (const char *)hello, strlen(hello),
74		   MSG_CONFIRM, (const struct sockaddr *)&servaddr1,
75		   sizeof(servaddr1));
76	printf("Hello message sent.\n");
77
78	n = recvfrom(sockfd, (char *)buffer, MAXLINE,
79				MSG_WAITALL, (struct sockaddr *) &servaddr,
80				&len);
81	buffer[n] = '\0';
82	printf("Server : %s\n", buffer);
83
84	close(sockfd);
85	return 0;
86}
87
88[root@localhost magx]#

2.2 编译->执行

12. 为 .c 文件添加权限
2
3root@localhost magx]# ll
4total 4
5-rw------- 1 root root 1985 Nov 14 11:31 udp_nobind_sendto.c
6[root@localhost magx]# 
7[root@localhost magx]# chmod u+x *
8[root@localhost magx]# ll
9total 4
10-rwx------ 1 root root 1985 Nov 14 11:31 udp_nobind_sendto.c
11[root@localhost magx]# 
12
13
143. 编译 c文件为可执行程序
15# gcc -o <将 .c 文件编译未可执行程序文件名> <要编译 .c 文件> -lpthread
16
17e.g: #gcc -o udp_nobind_sendto udp_nobind_sendto.c -lpthread
18
19
20[root@localhost magx]# gcc -o udp_nobind_sendto udp_nobind_sendto.c -lpthread
21[root@localhost magx]# 
22[root@localhost magx]# ll
23total 24
24-rwx------ 1 root root 17440 Nov 14 11:31 udp_nobind_sendto
25-rwx------ 1 root root  1985 Nov 14 11:31 udp_nobind_sendto.c
26[root@localhost magx]# 
27
28
294. 执行 已编译.c 可执行文件
30# ./<执行 已编译.c 可执行文件名> [如果需要传参,再此处添加即可]
31e.g:  ./udp_nobind_sendto 54321
32
33
34[root@localhost magx]# ./udp_nobind_sendto 54321
35sleep ....
36sleep ...end
37Hello message sent.
38

到此已完成 .c 文件编译


c文件编译》 是转载文章,点击查看原文


相关推荐


一句话把 Excalidraw 跑起来?SOLO Coder 把我以前踩过的坑都帮我填了
不惑_2025/11/14

Excalidraw 是一个开源、类手绘风格的虚拟白板工具,支持无限画布、暗色模式、图形库、导出 PNG/SVG、自由绘制、多语言、快捷键与绑定箭头等丰富能力。其官方应用原生支持 PWA 离线、本地优先存储、纯前端架构,非常适合私有化部署或内网使用。 要是你之前动手部署过开源项目,你应该懂那种感觉:教程看着简单,结果一动手就开始打怪,git clone → 解压 → 安装依赖 → 处理网络代理 → 启动服务 → 校验端口 → 本地预览。而这些步骤每一步都可能踩到网络、依赖、端口占用等坑。我以前搭


李飞飞「世界模型」正式开放,人人可用! Pro 版首月仅 7 元
新智元2025/11/13

「【新智元导读】只用一张图,一句话,就能创造出随便乱逛的 3D 世界——李飞飞这次不是在讲故事,而是真的给你「造梦神器」。今天起,全球上线,人人可用。」 李飞飞的「创世神器」今天终于正式上线了!人人可用。 这个由 WorldLabs 推出,名为 Marble 的网站,用世界模型可以生成瑰丽梦幻的「想象世界」~ 体验网址:marble.worldlabs.ai/ 这波属实是李飞飞自己联动自己了,前两天她的一篇万字长文火爆硅谷,定义 AI 的下一个十年是「空间智能」。 文章中,她为真正具备空间智


进入职场第四课—产出
Mapbarfront2025/11/12

新入职一家公司观察、融入、立足之后,要做的第四件事就是产出。 观察和融入帮你顺利度过新手期,立足则让你在团队中站稳脚跟,被大家真正接受,接下来你要做的是保持稳定,持续不断的产出,让团队感受到你究竟有多大能量。 易经乾卦中的终日乾乾,说的就是这个意思,终日指的是持续不断,意味着不能三天打鱼两天晒网,有了开头没有结尾,乾乾代表着产出,要有价值、有思考、有进阶,不能只做重复工作,毕竟在易经中,乾代表天,想完成立足到产出的关键跃升,以下这4个动作一定要做好。 1、产出有价值的成果。 立足期是你独立承担任


SpringBoot实现隐式参数注入
风象南2025/11/10

前言:一个痛点 想象一下这样的场景:用户请求带着 JWT Token 进入你的系统,Filter 层面解析 Token 得到用户 ID,接下来需要: 在 Controller 层获取用户信息 在 Service 层进行权限验证 在某些业务逻辑中记录操作日志 每一个环节都需要知道"当前用户是谁",看看目前常用的解决方案。 传统方案的"缺陷" 方案一:ThreadLocal // 看起来很"Hack" private static final ThreadLocal<Long> currentU


Python实战:用高德地图API批量获取地址所属街道并写回Excel
程序员爱钓鱼2025/11/8

在日常的数据处理工作中,我们经常需要根据公司、事件或门店的注册地址,批量获取其所在的街道信息,例如“浦东新区张江镇”“徐汇区龙华街道”等。 手动查询显然低效,而借助 Python + 高德地图API,我们可以轻松实现自动化批量查询并将结果写入 Excel 文件中。 本文将完整展示一个从 Excel 读取地址 → 调用高德API → 获取街道 → 写回Excel的实用脚本,并讲解实现细节与优化思路。 一、功能概述 这段脚本的功能可以总结为四步: 从 Excel 文件中读取地址数据; 调用高德


HTML中JS监听输入框值的即时变化
雨过天晴而后无语2025/11/5

一、说明         上一篇文章中提到了需要监听页面的一些组件内容变化,以便于更好的判断页面是否有更改,而控制“确定”按钮。         本里以JS监听输入框值的即时变化为引子,对这样的需求进行一个示例。 二、示例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmln


pdf文件上传下载记录
家有两宝,感恩遇见2025/10/31

一:上传单个pdf文件并用hash重命名及判断文件是不是已经上传过,可以参考hash图片 @PostMapping("/uploadPdfFileSingle")     public String uploadPdfFileSingle(@RequestPart("file") MultipartFile file) {         System.err.println("开始文件上传");         if (file.isEmpty()) {             System


Redis(91)Redis的访问控制列表(ACL)是如何工作的?
Victor3562025/10/29

Redis 6.0及以上版本支持访问控制列表(ACL),这允许更细粒度地控制不同用户的权限。ACL使得可以定义多个用户,每个用户有自己的一组权限,这些权限可以控制哪些命令可以执行,哪些键可以访问等。以下是Redis ACL的详细工作原理和示例代码。 1. 基本概念 用户:Redis的每一个用户都有一个唯一的名字。 权限:每个用户可以被授予一组权限,这些权限定义了用户可以执行哪些命令和访问哪些键。 认证:用户在连接Redis时需要提供用户名和密码进行认证。 2. 配置ACL 可以在Redis配


Java Stream流两大实战陷阱:并行流Parallel误用、List转Map时重复键异常
IT橘子皮2025/10/26

在Java 8引入的Stream API极大地简化了集合操作,让函数式编程在Java世界中大放异彩。然而,在实践中发现的,Stream API并非银弹,其中隐藏着一些容易踩坑的陷阱。本文将深入分析Stream流中最常见的两大问题:并行流的误用和List转Map时的重复键异常,并提供相应的解决方案。 一、并行流(parallel)的陷阱与优化方案 1.1 问题本质分析 并行流看似是性能优化的"神器",但实践表明,盲目使用parallel()可能适得其反: // 看似高效的并行处理,实则是性能陷阱


C 语言标准库头文件 locale.h
hubenchang05152025/10/23

#C 语言标准库头文件 locale.h 请查看 C 语言标准库头文件列表 了解更多相关 API。 这个头文件提供 本地化 的相关功能,例如设置数字和货币的格式。 设置语言环境需要操作系统支持,通常需要安装语言包。 例如: sudo apt install language-pack-zh-hans # 安装中文语言包 #类型 类型标准说明lconvC89格式化详细信息 #宏 宏标准说明NULLC89空指针常量 本地化类别宏标准说明LC_ALLC89整个 C 语言环境LC_COLLATE

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0