導航:首頁 > 文件教程 > linuxclose函數頭文件

linuxclose函數頭文件

發布時間:2022-09-11 09:57:37

❶ socket編程在windows和linux下的區別

socket在原理上應該是一樣的,只是不同系統的運行機置有些不同。
socket
編程
windows到linux代碼移植遇到的問題
1、一些常用函數的移植
2、網路
socket相關程序從windows移植到linux下需要注意的
1)頭文件
windows下winsock.h/winsock2.h
linux下sys/socket.h
錯誤處理:errno.h
其他常用函數的頭文件可到命令行下用man指令查詢。
2)初始化
windows下需要用wsastartup
linux下不需要(很方便),直接可以使用
3)關閉socket
windows下closesocket(...)
linux下close(...)
4)類型
windows下socket
在linux下為int類型
5)綁定地址的結構體
名稱相同,都是struct
sockaddr、struct
sockaddr_in,這兩者通常轉換使用;

❷ linux下socket編程中close()函數

你已經close了為什麼還要使用它呢?如果還需要使用這個連接,就不要close等用完了,退出的時候再把它關閉。

❸ close(sockfd);

In function `main':
client.c:(.text+0x22e): undefined reference to `cloes'編譯結果中已經說了無法找到『cloes』的定義,而且是在編譯client.c文件時出的錯,你可以打開client.c文件,查找『cloes』,看看是否有明確定義,或者應該是『close』而不是『cloes』
希望對你有幫助!

❹ linux的頭文件中是否有writeError函數

1.功能

將數據寫入已打開的文件內
2.相關函數
open,read,fcntl,close,lseek,sync,fsync,fwrite
3.表頭文件
#include<unistd.h>
4.定義函數
ssize_t write (int fd,const void * buf,size_t count);
5.函數說明
write()會把參數buf所指的內存寫入count個位元組到參數fd所指的文件內。當然,文件讀寫位置也會隨之移動。
6.返回值
如果順利write()會返回實際寫入的位元組數。當有錯誤發生時則返回-1,錯誤代碼存入errno中。
7.錯誤代碼
EINTR 此調用被信號所中斷。
EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK),若無數據可讀取則返回此值。
EBADF 參數fd非有效的文件描述詞,或該文件已關閉。

❺ linux下socket編程中close()函數

只要不用抄close或fclose,不管把這個socket_fd值存到哪裡,都可以使用。比如:
int socket_fd = socket(...);
int socket_x = socket_fd;
那麼send(socket_x)和send(socket_fd)結果完全一致

❻ linux c語言如何快速知道函數的頭文件

1、要用到unistd.h頭文件。

2、Write函數用法:write函數所在的頭文件為 <unistd.h>write有兩種用法。一種是:ssize_twrite(int handle, void *buf, int nbyte);handle 是文件描述符;buf是指定的緩沖區,即指針,指向一段內存單元;nbyte是要寫入文件指定的位元組數;返回值:寫入文檔的位元組數(成功);-1(出錯)write函數把buf中nbyte寫入文件描述符handle所指的文檔,成功時返回寫的位元組數,錯誤時返回-1.另一種是:write(const char* str,int n)str是字元指針或字元數組,用來存放一個字元串。n是int型數,它用來表示輸出顯示字元串中字元的個數。write("string",strlen("string");表示輸出字元串常量3、程序示例:

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sysstat.h>
#include<io.h>
#include<string.h>
intmain(void)
{
int*handle;charstring[40];
intlength,res;/*Createafilenamed"TEST.$$$".If"TEST.$$$"alreadyexists,itwillbeoverwritten.*/
if((handle=open("TEST.$$$",O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE))==-1)
{
printf("Erroropeningfile. ");
exit(1);
}
strcpy(string,"Hello,world! ");
length=strlen(string);
if((res=write(handle,string,length))!=length)
{
printf("Errorwritingtothefile. ");
exit(1);
}
printf("Wrote%dbytestothefile. ",res);
close(handle);return0;}

❼ 基於Linux的遠程指令系統(使用udp而不是tcp)

一. Linux下UDP編程框架

使用UDP進行程序設計可以分為客戶端和伺服器端兩部分。
1.伺服器端程序包括:
? 建立套接字
? 將套接字地址結構進行綁定
? 讀寫數據
? 關閉套接字
2.客戶端程序包括:
? 建立套接字
? 讀寫數據
? 關閉套接字
3.伺服器端和客戶端程序之間的差別
伺服器端和客戶端兩個流程之間的主要差別在於對地址的綁定函數(bind()函數),而客戶端可以不用進行地址和埠的綁定操作。

二.Linux中UDP套接字函數

從圖可知,UDP協議的服務端程序設計的流程分為套接字建立,套接字與地址結構進行綁定,收發數據,關閉套接字;客戶端程序流程為套接字建立,收發數據,關閉套接字等過程。它們分別對應socket(),bind(),sendto(),recvfrom(),和close()函數。
網路程序通過調用socket()函數,會返回一個用於通信的套接字描述符。Linux應用程序在執行任何形式的I/O操作的時候,程序是在讀或者寫一個文件描述符。因此,可以把創建的套接字描述符看成普通的描述符來操作,並通過讀寫套接字描述符來實現網路之間的數據交流。
1. socket
1> 函數原型:
int socket(int domain,int type,int protocol)
2> 函數功能:
函數socket()用於創建一個套接字描述符。
3> 形參:
? domain:用於指定創建套接字所使用的協議族,在頭文件
中定義。
常見的協議族如下:
AF_UNIX:創建只在本機內進行通信的套接字。
AF_INET:使用IPv4 TCP/IP協議
AF_INET6:使用IPv6 TCP/IP協議
說明:
AF_UNIX只能用於單一的UNIX系統進程間通信,而AF_INET是針對Interne的,因而可以允許在遠程主機之間通信。一般把它賦為AF_INET。
? type:指明套接的類型,對應的參數如下
SOCK_STREAM:創建TCP流套接字
SOCK_DGRAM:創建UDP數據報套接字
SOCK_RAW:創建原始套接字
? protocol:
參數protocol通常設置為0,表示通過參數domain指定的協議族和參數type指定的套接字類型來確定使用的協議。當為原始套接字時,系統無法唯一的確定協議,此時就需要使用使用該參數指定所使用的協議。
4> 返回值:執行成功後返回一個新創建的套接字;若有錯誤發生則返回一個-1,錯誤代碼存入errno中。
5> 舉例:調用socket函數創建一個UDP套接字
int sock_fd;
sock_fd = socket(AF_INET,SOCK_DGRAM,0);
if(sock_fd < 0){
perror(「socket」);
exit(1);
}
2. bind
1> 函數原型:
int bind(int sockfd,struct sockaddr *my_addr,socklen_taddrlen)
2> 函數功能
函數bind()的作用是將一個套接字文件描述符與一個本地地址綁定在一起。
3> 形參:
? sockfd:sockfd是調用socket函數返回的文件描述符;
? addrlen是sockaddr結構的長度。
? my_addr: 是一個指向sockaddr結構的指針,它保存著本地套接字的地址(即埠和IP地址)信息。不過由於系統兼容性的問題,一般不使用這個結構,而使用另外一個結構(struct sockaddr_in)來代替
4> 套接字地址結構:
(1)structsockaddr:
結構struct sockaddr定義了一種通用的套接字地址,它在
Linux/socket.h 中定義。
struct sockaddr{
unsigned short sa_family;/*地址類型,AF_XXX*/
char sa_data[14];/*14位元組的協議地址*/
}
a. sin_family:表示地址類型,對於使用TCP/IP協議進行的網路編程,該值只能是AF_INET.
b. sa_data:存儲具體的協議地址。
(2)sockaddr_in
每種協議族都有自己的協議地址格式,TCP/IP協議組的地址格式為結構體struct sockaddr_in,它在netinet/in.h頭文件中定義。
struct sockaddr_in{
unsigned short sin_family;/*地址類型*/
unsigned short sin_port;/*埠號*/
struct in_addr sin_addr;/*IP地址*/
unsigned char sin_zero[8];/*填充位元組,一般賦值為0*/
}
a. sin_family:表示地址類型,對於使用TCP/IP協議進行的網路編程,該值只能是AF_INET.
b. sin_port:是埠號
c. sin_addr:用來存儲32位的IP地址。
d. 數組sin_zero為填充欄位,一般賦值為0.
e. structin_addr的定義如下:
struct in_addr{
unsignedlong s_addr;
}
結構體sockaddr的長度為16位元組,結構體sockaddr_in的長度為16位元組。可以將參數my_addr的sin_addr設置為INADDR_ANY而不是某個確定的IP地址就可以綁定到任何網路介面。對於只有一IP地址的計算機,INADDR_ANY對應的就是它的IP地址;對於多宿主主機(擁有多個網卡),INADDR_ANY表示本伺服器程序將處理來自所有網路介面上相應埠的連接請求
5> 返回值:
函數成功後返回0,當有錯誤發生時則返回-1,錯誤代碼存入errno中。
6>舉例:調用socket函數創建一個UDP套接字
struct sockaddr_in addr_serv,addr_client;/*本地的地址信息*/
memset(&serv_addr,0,sizeof(struct sockaddr_in));
addr_serv.sin_family = AF_INET;/*協議族*/
addr_serv.sin_port = htons(SERV_PORT);/*本地埠號*/
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); /*任意本地地址*/
/*套接字綁定*/
if(bind(sock_fd,(struct sockaddr *)&addr_serv),sizeof(structsockaddr_in)) <0)
{
perror(「bind」);
exit(1);
}
3.close
1>函數原型:
int close(intfd);
2>函數功能:
函數close用來關閉一個套接字描述符。
3>函數形參:
? 參數fd為一個套接字描述符。
4>返回值:
執行成功返回0,出錯則返回-1.錯誤代碼存入errno中。
說明:
以上三個函數中,前兩個要包含頭文件
#include
#include
後一個包含:
#include
4.sendto
1>函數原型:
#include
#include
ssize_t sendo(ints,const void *msg,size_t len,int flags,const struct sockaddr *to,socklen_ttolen);
2>函數功能:
向目標主機發送消息
3>函數形參:
? s:套接字描述符。
? *msg:發送緩沖區
? len:待發送數據的長度
? flags:控制選項,一般設置為0或取下面的值
(1)MSG_OOB:在指定的套接字上發送帶外數據(out-of-band data),該類型的套接字必須支持帶外數據(eg:SOCK_STREAM).
(2)MSG_DONTROUTE:通過最直接的路徑發送數據,而忽略下層協議的路由設置。
? to:用於指定目的地址
? tolen:目的地址的長度。
4>函數返回值:
執行成功後返回實際發送數據的位元組數,出錯返回-1,錯誤代碼存入errno中。
5>函數舉例:
char send_buf[BUFFERSIZE];
struct sockaddr_in addr_client;

memset(&addr_client,0,sizeof(struct sockaddr_in));
addr_client.sin_family = AF_INET;
addr_client.sin_port = htons(DEST_PORT);
if(inet_aton(「172.17.242.131」,&addr_client.sin_addr)<0){
perror(「inet_aton」);
exit(1);
}
if(sendto(sock_fd,send_buf,len,0,(strut sockaddr*)&addr_client,sizeof(struct sockaddr_in)) <0){
perror(「sendto」);
exit(1);
}
5.recvfrom
1>函數原型:
#include
#include
ssize_t recvfrom(int s,void *buf,size_t len,intflags,struct sockaddr *from,socklen_t *fromlen);
2>函數功能:接收數據
3>函數形參:
? int s:套接字描述符
? buf:指向接收緩沖區,接收到的數據將放在這個指針所指向的內存空間。
? len:指定了緩沖區的大小。
? flags:控制選項,一般設置為0或取以下值
(1)MSG_OOB:請求接收帶外數據
(2)MSG_PEEK:只查看數據而不讀出
(3)MSG_WAITALL:只在接收緩沖區時才返回。
? *from:保存了接收數據報的源地址。
? *fromlen:參數fromlen在調用recvfrom前為參數from的長度,調用recvfrom後將保存from的實際大小。
4>函數返回值:
執行成功後返回實際接收到數據的位元組數,出錯時則返回-1,錯誤代碼存入errno中。
5>函數實例:
char recv_buf[BUFFERSIZE];
struct sockaddr_in addr_client;
int src_len;
src_len = sizeof(struct sockaddr_in);
int src_len;
src_len = sizeof(struct sockaddr_in);
if(recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(structsockaddr *)&src_addr,&src_len)<0){
perror(「again_recvfrom」);
exit(1);
}
三.UDP編程實例

客戶端向伺服器發送字元串Hello tiger,伺服器接收到數據後將接收到字元串發送回客戶端。

1.伺服器端程序
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9
10 #define SERV_PORT 3000
11
12 int main()
13 {
14 int sock_fd; //套接子描述符號
15 int recv_num;
16 int send_num;
17 int client_len;
18 char recv_buf[20];
19 struct sockaddr_in addr_serv;
20 struct sockaddr_in addr_client;//伺服器和客戶端地址
21 sock_fd = socket(AF_INET,SOCK_DGRAM,0);
22 if(sock_fd < 0){
23 perror("socket");
24 exit(1);
25 } else{
26
27 printf("sock sucessful\n");
28 }
29 //初始化伺服器斷地址
30 memset(&addr_serv,0,sizeof(struct sockaddr_in));
31 addr_serv.sin_family = AF_INET;//協議族
32 addr_serv.sin_port = htons(SERV_PORT);
33 addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);//任意本地址
34
35 client_len = sizeof(struct sockaddr_in);
36 /*綁定套接子*/
37 if(bind(sock_fd,(struct sockaddr *)&addr_serv,sizeof(struct sockaddr_in))<0 ){
38 perror("bind");
39 exit(1);

40 } else{
41
42 printf("bind sucess\n");
43 }
44 while(1){
45 printf("begin recv:\n");
46 recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_client,&client_len);
47 if(recv_num < 0){
48 printf("bad\n");
49 perror("again recvfrom");
50 exit(1);
51 } else{
52 recv_buf[recv_num]='\0';
53 printf("recv sucess:%s\n",recv_buf);
54 }
55 printf("begin send:\n");
56 send_num = sendto(sock_fd,recv_buf,recv_num,0,(struct sockaddr *)&addr_client,client_len);
57 if(send_num < 0){
58 perror("sendto");
59 exit(1);
60 } else{
61 printf("send sucessful\n");
62 }
63 }
64 close(sock_fd);
65 return 0;
66 }

2.客戶端程序
1 #include
2 #include
3 #include
4 #include
5 #include
6
7 #include
8 #include
9 #include
10
11 #define DEST_PORT 3000
12 #define DSET_IP_ADDRESS "192.168.1.103"
13
14 int main()
15 {
16 int sock_fd;/*套接字文件描述符*/
17 int send_num;
18 int recv_num;
19 int dest_len;
20 char send_buf[20]={"hello tiger"};
21 char recv_buf[20];
22 struct sockaddr_in addr_serv;/*服務端地址,客戶端地址*/
23
24 sock_fd = socket(AF_INET,SOCK_DGRAM,0);//創建套接子
25 //初始化伺服器端地址
26 memset(&addr_serv,0,sizeof(addr_serv));
27 addr_serv.sin_family = AF_INET;
28 addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
29 addr_serv.sin_port = htons(DEST_PORT);
30
31 dest_len = sizeof(struct sockaddr_in);
32 printf("begin send:\n");
33 send_num = sendto(sock_fd,send_buf,sizeof(send_buf),0,(struct sockaddr *)&addr_serv,dest_len);
34 if(send_num < 0){
35 perror("sendto");
36 exit(1);
37 } else{
38
39 printf("send sucessful:%s\n",send_buf);

40 }
41 recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_serv,&dest_len);
42 if(recv_num <0 ){
43
44 perror("recv_from");
45 exit(1);
46 } else{
47 printf("recv sucessful\n");
48 }
49 recv_buf[recv_num]='\0';
50 printf("the receive:%s\n",recv_buf);
51 close(sock_fd);
52 return 0;
53 }

❽ linux close命令

你是指C語言的庫函數 close 吧? 它是用來關閉文件的,它的參數是調用 open 函數或者 create 函數成功後返回的文件句柄,是一個整型變數。用 close 的時候需要
#include <unistd.h>

舉例子:
/**************************** 源文件 eg.c ***********************************/
#include <sys/types.h>
#include <sys/stat.h>
#include <fnct.h>
/* 以上是調用 open 函數所需的頭文件 */

#include <unistd.h>

int main(int argc, char **argv) {
int fd;

if (argc == 1) {
沒有文件名,報錯,或者提供一個默認的文件名;

}

fd = open(argv[1], O_RDWR);
if(fd < 0) {
打開失敗,報錯,退出;

}

/* 成功打開文件之後 */
各種操作;

close(fd);
return(0);
}

❾ linux中用close關閉一個未打開的文件,會發生什麼 為什麼

會返回-1
close()函數執行成功返回0,否則返回-1
#include <unistd.h>
int main(void)
{
int a=close(3);
printf("%d",a);
}
用3是因為0,1,2分別對應標准輸入,標准輸出,標准錯誤

[firefly@localhost Project]$ cc test.c
[firefly@localhost Project]$ ./a.out
-1[firefly@localhost Project]$

❿ linux下 用fcnl.h頭文件中的文件讀寫函數, 怎麼把1-100的字元串寫到一個文件中,且每

open(打開文件)
相關函數 read,write,fcntl,close,link,stat,umask,unlink,fopen
表頭文件 #include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
定義函數 int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);

函數說明 參數pathname 指向欲打開的文件路徑字元串。下列是參數flags 所能使用的旗標:
O_RDONLY 以只讀方式打開文件
O_WRONLY 以只寫方式打開文件
O_RDWR 以可讀寫方式打開文件。上述三種旗標是互斥的,也就是不可同時使用,但可與下列的旗標利用OR(|)運算符組合。
O_CREAT 若欲打開的文件不存在則自動建立該文件。
O_EXCL 如果O_CREAT 也被設置,此指令會去檢查文件是否存在。文件若不存在則建立該文件,否則將導致打開文件錯誤。此外,若O_CREAT與O_EXCL同時設置,並且欲打開的文件為符號連接,則會打開文件失敗。
O_NOCTTY 如果欲打開的文件為終端機設備時,則不會將該終端機當成進程式控制制終端機。
O_TRUNC 若文件存在並且以可寫的方式打開時,此旗標會令文件長度清為0,而原來存於該文件的資料也會消失。
O_APPEND 當讀寫文件時會從文件尾開始移動,也就是所寫入的數據會以附加的方式加入到文件後面。
O_NONBLOCK 以不可阻斷的方式打開文件,也就是無論有無數據讀取或等待,都會立即返回進程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打開文件。
O_NOFOLLOW 如果參數pathname 所指的文件為一符號連接,則會令打開文件失敗。
O_DIRECTORY 如果參數pathname 所指的文件並非為一目錄,則會令打開文件失敗。
此為Linux2.2以後特有的旗標,以避免一些系統安全問題。參數mode 則有下列數種組合,只有在建立新文件時才會生效,此外真正建文件時的許可權會受到umask值所影響,因此該文件許可權應該為(mode-umaks)。
S_IRWXU00700 許可權,代表該文件所有者具有可讀、可寫及可執行的許可權。
S_IRUSR 或S_IREAD,00400許可權,代表該文件所有者具有可讀取的許可權。
S_IWUSR 或S_IWRITE,00200 許可權,代表該文件所有者具有可寫入的許可權。
S_IXUSR 或S_IEXEC,00100 許可權,代表該文件所有者具有可執行的許可權。
S_IRWXG 00070許可權,代表該文件用戶組具有可讀、可寫及可執行的許可權。
S_IRGRP 00040 許可權,代表該文件用戶組具有可讀的許可權。
S_IWGRP 00020許可權,代表該文件用戶組具有可寫入的許可權。
S_IXGRP 00010 許可權,代表該文件用戶組具有可執行的許可權。
S_IRWXO 00007許可權,代表其他用戶具有可讀、可寫及可執行的許可權。
S_IROTH 00004 許可權,代表其他用戶具有可讀的許可權
S_IWOTH 00002許可權,代表其他用戶具有可寫入的許可權。
S_IXOTH 00001 許可權,代表其他用戶具有可執行的許可權。

返回值 若所有欲核查的許可權都通過了檢查則返回0 值,表示成功,只要有一個許可權被禁止則返回-1。

錯誤代碼 EEXIST 參數pathname 所指的文件已存在,卻使用了O_CREAT和O_EXCL旗標。
EACCESS 參數pathname所指的文件不符合所要求測試的許可權。
EROFS 欲測試寫入許可權的文件存在於只讀文件系統內。
EFAULT 參數pathname指針超出可存取內存空間。
EINVAL 參數mode 不正確。
ENAMETOOLONG 參數pathname太長。
ENOTDIR 參數pathname不是目錄。
ENOMEM 核心內存不足。
ELOOP 參數pathname有過多符號連接問題。
EIO I/O 存取錯誤。

附加說明 使用access()作用戶認證方面的判斷要特別小心,例如在access()後再作open()空文件可能會造成系統安全上的問題。

閱讀全文

與linuxclose函數頭文件相關的資料

熱點內容
360路由器怎麼設置隱藏wifi密碼錯誤 瀏覽:98
數據泄漏帶來哪些倫理問題 瀏覽:726
如何有條件查找數據 瀏覽:744
excel怎麼打開文件存儲 瀏覽:903
u盤怎樣顯示文件後綴 瀏覽:627
如何更改網路共享 瀏覽:967
延時攝影的文件儲存在哪裡 瀏覽:691
為什麼好的網站找不到 瀏覽:370
聯通升級後就是小卡了嗎 瀏覽:363
數據線充電不進電怎麼辦 瀏覽:172
哪個編程平台好學 瀏覽:259
xp系統文件夾共享許可權設置 瀏覽:532
搜索文件格式 瀏覽:162
興趣班編程貓是什麼 瀏覽:195
編程i3和i5哪個好 瀏覽:856
mac用什麼打開pdf文件 瀏覽:903
手機百度查看過的網站怎麼刪除 瀏覽:620
applemusic支持哪些文件格式 瀏覽:79
全省統一編程是什麼意思 瀏覽:501
現在的編程課有哪些 瀏覽:820

友情鏈接