ubuntuc语言编程步骤

本文介绍如何使用vim编辑器创建并编译简单的C程序。通过实例演示从创建文件到编译运行的全过程,并分享了提高效率的小技巧。
通过vim file.c创建一个c文件,打开就可以写自己的C程序了,如:
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("Hello World!\n");
    return 0;
}

输入完程序后输入 :wq 保存退出,我这里保存得路径为/home/wonder/桌面/helloworld/hello.c

然后就是编译,打开终端,进入目录

# cd /home/wonder/桌面/helloworld/

输入gcc helloworld.c,编译默认生成名为a.out的执行文件。

gcc会显示编译过程中发现的问题于错误,若无错误出现则会编译成文件a.out

运行程序(a.out为编译生成的文件)
# ./a.out

这时候屏幕会显示
Hello World!
~#
表示编译运行成功

小技巧:
如果编写一个比较大的程序,需要很长时间完成的话,可以建立一个启动器,以便快速方便的进行编译,比如你要花很多天编写一个源程序,就可以在桌面上建立一个启动器,指向c程序所在的目录,起动器命令如下(这里以C源程序在/home/user1/桌面/hello/目录下为例)

gnome-terminal  --working-directory=/home/user1/桌面/hello/

以后每次进行编译时打开此起动器,就可以直接使用gcc对源程序文件名进行编译而无需输入很长的路径了
~# gcc hello.c
~#./a.out
Ubuntu系统下进行C语言Socket编程时,需要掌握基础的网络通信机制以及相关函数的使用。以下内容结合了Socket编程的基本流程和具体操作。 ### 创建Socket 使用`socket()`函数创建一个套接字,该函数需要指定地址族(如`AF_INET`表示IPv4)、套接字类型(如`SOCK_STREAM`表示TCP)和协议(通常为0,表示默认协议)。 ```c int sockfd = socket(AF_INET, SOCK_STREAM, 0); ``` 若创建失败,函数会返回-1,并需要检查错误信息[^2]。 ### 绑定Socket到端口 使用`bind()`函数将套接字绑定到特定的IP地址和端口号上。需要先定义一个`sockaddr_in`结构体,并设置其地址族、IP地址和端口号。 ```c struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); // 将主机字节序转换为网络字节序 server_addr.sin_addr.s_addr = INADDR_ANY; // 监听所有网络接口 bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); ``` 绑定失败时,函数会返回-1,需要检查错误信息[^2]。 ### 监听连接 对于服务器端程序,使用`listen()`函数开始监听客户端的连接请求。该函数需要指定套接字和最大连接队列长度(如`5`)。 ```c listen(sockfd, 5); ``` ### 接受连接 使用`accept()`函数接受客户端的连接请求,并返回一个新的套接字用于与客户端通信。 ```c struct sockaddr_in client_addr; socklen_t client_len = sizeof(client_addr); int client_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_len); ``` 若接受连接失败,函数会返回-1,需要检查错误信息。 ### 发送和接收数据 使用`send()`和`recv()`函数进行数据的发送和接收。例如,服务器端可以向客户端发送消息: ```c send(client_sockfd, "Hello from server", strlen("Hello from server"), 0); ``` 客户端可以接收服务器端的消息: ```c char buffer[1024]; recv(client_sockfd, buffer, sizeof(buffer), 0); printf("Received: %s\n", buffer); ``` ### 关闭Socket 通信完成后,使用`close()`函数关闭套接字以释放资源。 ```c close(sockfd); close(client_sockfd); ``` ### 示例代码:TCP服务器端 以下是一个完整的TCP服务器端程序示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> int main() { int sockfd, client_sockfd; struct sockaddr_in server_addr, client_addr; socklen_t client_len = sizeof(client_addr); // 创建Socket sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("Socket creation failed"); exit(EXIT_FAILURE); } // 绑定Socket到端口 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = INADDR_ANY; if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("Bind failed"); close(sockfd); exit(EXIT_FAILURE); } // 监听连接 if (listen(sockfd, 5) < 0) { perror("Listen failed"); close(sockfd); exit(EXIT_FAILURE); } printf("Server is listening on port 8080...\n"); // 接受连接 client_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_len); if (client_sockfd < 0) { perror("Accept failed"); close(sockfd); exit(EXIT_FAILURE); } // 发送数据 const char* message = "Hello from server"; send(client_sockfd, message, strlen(message), 0); // 关闭Socket close(client_sockfd); close(sockfd); return 0; } ``` ### 示例代码:TCP客户端 以下是一个完整的TCP客户端程序示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> int main() { int sockfd; struct sockaddr_in server_addr; // 创建Socket sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("Socket creation failed"); exit(EXIT_FAILURE); } // 设置服务器地址 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr); // 连接服务器 if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("Connection failed"); close(sockfd); exit(EXIT_FAILURE); } // 接收数据 char buffer[1024]; int bytes_read = recv(sockfd, buffer, sizeof(buffer), 0); if (bytes_read > 0) { buffer[bytes_read] = '\0'; printf("Received: %s\n", buffer); } // 关闭Socket close(sockfd); return 0; } ``` ### 编译和运行 在Ubuntu系统下,可以使用`gcc`编译C语言Socket程序。例如: ```bash gcc server.c -o server ./server ``` 在另一个终端中运行客户端程序: ```bash gcc client.c -o client ./client ``` ### 总结 Ubuntu下的C语言Socket编程涉及创建套接字、绑定端口、监听连接、接受连接、发送和接收数据以及关闭套接字等步骤。通过上述示例和说明,可以快速掌握Socket编程的基本方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值