导航:首页 > 编程语言 > linux编程代码

linux编程代码

发布时间:2022-08-27 20:55:20

linux socket编程代码解析

很简单的一个socket server端和client端通信程序啊!
server端监听端口,client主动连接server端,连接上后client端先将student这样一个结构体数据发送给server端,server端线接受这个结构体数据,然后再向client端发送这个student结构体数据,client端接收。
ok,通信过程完成。

Ⅱ linux中关于流式套接字编程代码的解释,求大神把每行代码加上注释,具体一点

服务器端
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<stdlib.h>

intmain(intargc,char*argv)
{
intserver_sockfd,client_sockfd;
intserver_len,client_len;
structsockaddr_inserver_address;
structsockaddr_inclient_address;

//获得一个socket文件描述符,使用tcpip协议
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
server_address.sin_family=AF_INET;
//设置服务器端接受任何主机的请求
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
//使用端口9734来接受请求
server_address.sin_port=htons(9734);
server_len=sizeof(server_address);
//绑定socket
bind(server_sockfd,(structsockaddr*)&server_address,server_len);

//监听连接请求,连接请求队列大小为5
listen(server_sockfd,5);

while(1)
{
charch;
printf("serverwaiting ");

client_len=sizeof(client_address);

//接受client端的连接请求,如果没有连接请求,该进程将阻塞
client_sockfd=accept(server_sockfd,(structsockaddr*)&client_address,&client_len);
//读数据
read(client_sockfd,&ch,1);
ch++;
//写数据
write(client_sockfd,&ch,1);

//关闭与client端的连接
close(client_sockfd);

}
}

客户端
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

intmain(intargc,char*argv)
{
intsockfd;
intlen;
structsockaddr_inaddress;
intresult;
charch='A';

//设置需要连接服务器的ipport
sockfd=socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=htons(9734);
len=sizeof(address);

//连接服务器
result=connect(sockfd,(structsockaddr*)&address,len);
if(result==-1)
{
perror("oops:client3");
exit(1);
}

//写数据
write(sockfd,&ch,1);
//读数据
read(sockfd,&ch,1);
printf("charfromserver=%c ",ch);
//关闭与服务器的连接
close(sockfd);
exit(0);

}


关于你的问题:
1.简单的方法,设置socket套接字为非阻塞模式,然后轮询,并查看是否超时。

或者是使用select poll 等方法 ,设置超时时间。

或者 使用 alarm 信号,都可以。

2..每当接收到一个client 端的连接请求,就开辟一个线程为之服务。

或者使用select poll epoll等方法,推荐这个。

3.你是指的是处理信号吗?这个有专门的函数 signal 可以处理。

Ⅲ 如何在linux上编写c语言程序代码

linux终端下,编译C语言程序步骤为:
采用vi进行源代码编写,编写完成后,:wq存盘退出,如:
vi
test.c
命令行下,运行gcc编译程序,生成执行码,如:
gcc
-o
test
test.c
-o
表示指明生成的执行码名称
运行编译后的执行码
./test

Ⅳ linux下c语言编程,求代码。。

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void ouch(int sig)
{
(void) signal(SIGINT, SIG_DFL);
int i;
for(i=0;i<3;i++)
printf("%d\n",(int) (((double)rand())/RAND_MAX*10) );
}
int main()
{
(void) signal(SIGINT, ouch);
while(1) {
printf("请按下Ctrl+c产生随机数\n");
sleep(1);
}
}
rand()产生0到RAND_MAX的整数,((double)rand() )/RAND_MAX为0到1的小数,再乘以10取整得到1到10的随机整数

Ⅳ linux系统作业,求代码过程

谢谢!
Linux内核配置系统由三部组别:
?Makefile:布 Linux 内核源代码 Makefile定义 Linux 内核编译规则;
?配置文件(config.in):给用户提供配置选择功能;
?配置工具:包括配置命令解释器(配置脚本使用配置命令进行解释)配置用户界面(提供基于字符界面、基于 Ncurses 图形界面及基于 Xwindows 图形界面用户配置界面各自应于 Make config、Make menuconfig make xconfig)
些配置工具都使用脚本语言 Tcl/TK、Perl 编写(包含些用 C 编写代码)本文并配置系统本身进行析介绍何使用配置系统所除非配置系统维护者般内核发者须解原理需要知道何编写 Makefile 配置文件所本文我 Makefile 配置文件进行讨论另外凡涉及与具体 CPU 体系结构相关内容我都 ARM 例仅讨论问题明确化且内容本身产影响
2. Makefile
2.1 Makefile 概述
Makefile 作用根据配置情况构造需要编译源文件列表别编译并目标代码链接起终形 Linux 内核二进制文件
由于 Linux 内核源代码按照树形结构组织所 Makefile 布目录树Linux 内核 Makefile 及与 Makefile 直接相关文件:

?Makefile:顶层 Makefile整内核配置、编译总体控制文件
?.config:内核配置文件包含由用户选择配置选项用存放内核配置结( make config)
?arch/*/Makefile:位于各种 CPU 体系目录 Makefile arch/arm/Makefile针特定平台 Makefile
?各目录 Makefile:比 drivers/Makefile负责所目录源代码管理
?Rules.make:规则文件所 Makefile 使用
用户通 make config 配置产 .config顶层 Makefile 读入 .config 配置选择顶层 Makefile 两主要任务:产 vmlinux 文件内核模块(mole)达目顶层 Makefile 递归进入内核各目录别调用位于些目录 Makefile至于底进入哪些目录取决于内核配置顶层 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 体系结构 Makefile Makefile 包含平台相关信息
位于各目录 Makefile 同根据 .config 给配置信息构造前配置需要源文件列表并文件 include $(TOPDIR)/Rules.make
Rules.make 文件起着非重要作用定义所 Makefile 共用编译规则比需要本目录所 c 程序编译汇编代码需要 Makefile 编译规则:
%.s: %.c
$(CC) $(CFLAGS) -S $< -o $@

目录都同要求需要各自 Makefile 包含编译规则比较麻烦 Linux 内核则类编译规则统放置 Rules.make 并各自 Makefile 包含进 Rules.make(include Rules.make)避免 Makefile 重复同规则于面例 Rules.make 应规则:
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $< -o $@

2.2 Makefile 变量
顶层 Makefile 定义并向环境输许变量各目录 Makefile 传递些信息些变量比 SUBDIRS仅顶层 Makefile 定义并且赋初值且 arch/*/Makefile 作扩充
用变量几类:
1) 版本信息
版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定义前内核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同构内核发行版本KERNELRELEASE:2.4.18-rmk7
2) CPU 体系结构:ARCH
顶层 Makefile 用 ARCH 定义目标 CPU 体系结构比 ARCH:=arm 等许目录 Makefile 要根据 ARCH 定义选择编译源文件列表
3) 路径信息:TOPDIR, SUBDIRS
TOPDIR 定义 Linux 内核源代码所根目录例各目录 Makefile 通 $(TOPDIR)/Rules.make 找 Rules.make 位置
SUBDIRS 定义目录列表编译内核或模块顶层 Makefile 根据 SUBDIRS 决定进入哪些目录SUBDIRS 值取决于内核配置顶层 Makefile SUBDIRS 赋值 kernel drivers mm fs net ipc lib;根据内核配置情况 arch/*/Makefile 扩充 SUBDIRS 值参见4)例
4) 内核组信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS
Linux 内核文件 vmlinux 由规则产:
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o
--start-group
$(CORE_FILES)
$(DRIVERS)
$(NETWORKS)
$(LIBS)
--end-group
-o vmlinux
看vmlinux 由 HEAD、main.o、version.o、CORE_FILES、DRIVERS、NETWORKS LIBS 组些变量( HEAD)都用定义连接 vmlinux 目标文件库文件列表其HEADarch/*/Makefile 定义用确定先链接进 vmlinux 文件列表比于 ARM 系列 CPUHEAD 定义:
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
表明 head-$(PROCESSOR).o init_task.o 需要先链接 vmlinux PROCESSOR armv 或 armo取决于目标 CPU CORE_FILESNETWORKDRIVERS LIBS 顶层 Makefile 定义并且由 arch/*/Makefile 根据需要进行扩充 CORE_FILES 应着内核核文件 kernel/kernel.omm/mm.ofs/fs.oipc/ipc.o看些组内核重要文件同arch/arm/Makefile CORE_FILES 进行扩充:
# arch/arm/Makefile
# If we have a machine-specific directory, then include it in the build.
MACHDIR := arch/arm/mach-$(MACHINE)
ifeq ($(MACHDIR),$(wildcard $(MACHDIR)))
SUBDIRS += $(MACHDIR)
CORE_FILES := $(MACHDIR)/$(MACHINE).o $(CORE_FILES)
endif
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
SUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpe
CORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
LIBS := arch/arm/lib/lib.a $(LIBS)

5) 编译信息:CPP, CC, AS, LD, ARCFLAGSLINKFLAGS
Rules.make 定义编译通用规则具体特定场合需要明确给编译环境编译环境变量定义针交叉编译要求定义 CROSS_COMPILE比:
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
......
CROSS_COMPILE 定义交叉编译器前缀 arm-linux-表明所交叉编译工具都 arm-linux- 所各交叉编译器工具前都加入 $(CROSS_COMPILE)组完整交叉编译工具文件名比 arm-linux-gcc
CFLAGS 定义传递给 C 编译器参数
LINKFLAGS 链接 vmlinux 由链接器使用参数LINKFLAGS arm/*/Makefile 定义比:
# arch/arm/Makefile
LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds

6) 配置变量CONFIG_*
.config 文件许配置变量等式用说明用户配置结例 CONFIG_MODULES=y 表明用户选择 Linux 内核模块功能
.config 顶层 Makefile 包含形许配置变量每配置变量具确定值:y 表示本编译选项应内核代码静态编译进 Linux 内核;m 表示本编译选项应内核代码编译模块;n 表示选择编译选项;根本没选择配置变量值空
2.3 Rules.make 变量
前面讲Rules.make 编译规则文件所 Makefile 都包括 Rules.makeRules.make 文件定义许变量重要些编译、链接列表变量
O_OBJSL_OBJSOX_OBJSLX_OBJS:本目录需要编译进 Linux 内核 vmlinux 目标文件列表其 OX_OBJS LX_OBJS "X" 表明目标文件使用 EXPORT_SYMBOL 输符号
M_OBJSMX_OBJS:本目录需要编译装载模块目标文件列表同MX_OBJS "X" 表明目标文件使用 EXPORT_SYMBOL 输符号
O_TARGETL_TARGET:每目录都 O_TARGET 或 L_TARGETRules.make 首先源代码编译 O_OBJS OX_OBJS 所目标文件使用 $(LD) -r 链接 O_TARGET 或 L_TARGETO_TARGET .o 结尾 L_TARGET .a 结尾

Ⅵ 请有各位大虾帮我分析下面关于LINUX文件系统编程的代码,然后回答几个问题

(1)num=read(0,buffer,MAX); write(fd,buffer,num);
表示从标准输入设备中(键盘输入) 读取数据放入buffer 再写到“file1”中
0代表标准输入设备, 1代表标准输出设备 , 2,代表错误输出设备
(2)execv( path , argv ) 用来执行path字符串所代表的文件路径文 argv是执行命令
总的来说就是执行 ls -l file1这个命令 这个命令执行后 会列出file1的文件属性
包括访问权限

Ⅶ linux socket编程代码

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>

char *host_name="127.0.0.1";
int port=7778;

struct student
{
char name[20];
char num[20];
float score;
}t={"xiejian","200701415",89.9};

int main ( )
{
char buf[502];
int socket_descriptor;
struct sockaddr_in pin;
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET;
inet_pton(AF_INET,host_name,&pin.sin_addr);
pin.sin_port=htons(port);
if((socket_descriptor=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Error openung socket!\n");
exit(1);
}
if(connect(socket_descriptor,(void *)&pin,sizeof (pin))==-1)
{
perror("can not connecting to server!\n");
exit (1);
}
printf("Send message to server ...\n");
//memset(buf,0,502);
//memcpy(buf,(void *)&t,sizeof(t));
//sprintf(buf,"%s %d",t.name,t.num);
//printf("the first string : %s\n",buf);
if(send(socket_descriptor,(void *) &t,sizeof(t),0)==-1)
{
perror("can not send message!\n");
exit (1);
}
printf("waiting for response from server!\n");
memset(buf,0,502);
if(recv(socket_descriptor,buf,sizeof(buf),0)==-1)
{
perror("can not receive response !\n");
exit (1);
}
printf("\n Response from server : \n");
memcpy((struct student *)&t,buf,sizeof(buf));
//printf("the string : %s \n",rebuf);
printf("--%s--%s--%5.1f--\n",t.name,t.num,t.score);
close (socket_descriptor);
}

/* 注意在send 结构体时应该把结构体强制类型转换为void * 型
** 接受之后又要强制转换回结构体型!否则则穿过来的是结构体的
** 一部分!
*/

下面是服务端
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netdb.h>

int port=7778;
struct student
{
char name[20];
char num[20];
float score;
}t;

main()
{
struct sockaddr_in sin;
struct sockaddr_in pin;
int sock_descriptor;
int temp_sock_descriptor;
int size_of_addr;
//struct cfg a;
char buf[502];
int i,lenth;
sock_descriptor=socket(AF_INET,SOCK_STREAM,0);
if(sock_descriptor==-1)
{
perror("socket!\n");
exit(1);
}
bzero(&sin,sizeof(sin));
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(port);
if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof (sin))==-1)
{
perror("bind!\n");
exit(1);
}
if(listen (sock_descriptor,20)==-1)
{
perror("listen!\n");
exit(1);
}
printf("Waiting for accepting connection from client!\n");
while(1)
{
printf("the process is waiting here!\n");
temp_sock_descriptor=accept(sock_descriptor, (struct sockaddr *)&pin,&size_of_addr);
if(temp_sock_descriptor==-1)
{
perror("call to accept!\n");
exit (1);
}
memset(buf,0,502);
if(recv(temp_sock_descriptor,buf,sizeof(buf),0)==-1)
{
perror("recv!\n");
exit (1);
}

printf("received : \n");
//printf("the recv buf is :%s\n",buf);
memcpy((struct student *) &t,buf,sizeof(buf));
printf("--%s--%s--%5.1f--\n",t.name,t.num,t.score);
if(send (temp_sock_descriptor,(void *) &t,sizeof(t),0)==-1)
{
perror("send!\n");
exit(1);
}
close (temp_sock_descriptor);
}
}

Ⅷ Linux C编程 求代码

#include <stdio.h>
#include <stdlib.h>

int cal(int x,int y,char f)
{
switch(f)
{
case '*':return x*y;
case '/':return x/y;
case '%':return x%y;
case '+':return x+y;
case '-':return x-y;
}
printf("error ");
exit(1);
return 100;
}

int test(int i,int j,char f[])
{
int temp;
if(i<=j)
{
if(!cal(cal(1,1,f[i]),1,f[j]))return 1;
}
else
{
temp=cal(1,1,f[j]);
if((f[i]=='/' || f[i]=='%') && !temp)return 0;
if(!cal(1,temp,f[i]))return 1;
}
return 0;
}
int main()
{
char f[]={'*','/','%','+','-'};
int i,j;
for (i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(test(i,j,f))
{
printf("1%c1%c1=0 ",f[i],f[j]);
}
}
}
return 0;
}


阅读全文

与linux编程代码相关的资料

热点内容
卸载联想app哪个好 浏览:719
php文字转图片 浏览:328
豆客后台怎么加密码 浏览:574
jpg转换pdf破解版 浏览:978
php基础书籍推荐 浏览:775
服务器与外网不通如何验证 浏览:351
电子版是不是就是文件夹 浏览:50
游戏属性文件加密 浏览:462
如何让安卓手机桌面图标下移 浏览:528
ubuntuphp5环境搭建 浏览:99
赌瘾解压视频 浏览:917
晋城移动dns服务器地址 浏览:294
php开源文库系统 浏览:134
android记事本源码 浏览:406
安卓11小游戏怎么玩法 浏览:189
gif有损压缩 浏览:936
windows下安装linux命令操作 浏览:843
米家app怎么设置进门亮灯 浏览:652
任我行服务器为什么会影响截图 浏览:296
安卓留言板怎么删除 浏览:18