導航:首頁 > 編程語言 > 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哪個好 瀏覽:457
安卓外放聲音怎麼解決 瀏覽:194
脈脈app干什麼用的 瀏覽:357
拽姐是哪個app 瀏覽:858
雲伺服器刪除了還有嗎 瀏覽:232
macbook可以用單片機嘛 瀏覽:307
南陽php招聘 瀏覽:814
去哪裡找按摩師很漂亮的app 瀏覽:818
86x99用簡便演算法計算 瀏覽:830
php截圖flash 瀏覽:274
卸載聯想app哪個好 瀏覽:721
php文字轉圖片 瀏覽:332
豆客後台怎麼加密碼 瀏覽:575
jpg轉換pdf破解版 瀏覽:979
php基礎書籍推薦 瀏覽:779
伺服器與外網不通如何驗證 瀏覽:353
電子版是不是就是文件夾 瀏覽:52
游戲屬性文件加密 瀏覽:464
如何讓安卓手機桌面圖標下移 瀏覽:530
ubuntuphp5環境搭建 瀏覽:101