原创 Linux的端口和套接字

Linux 的端口是一個邏輯概念,其由 TCP/IP 協議定義,是一個 0–65535 之間的數字,可以分爲常用的“固定”端口和通用端口兩個部分。 “固定”端口是指一些常用的軟件或者 TCP/IP 協議中確定和公佈的,通常來說不會

原创 [編程題]不用加減乘除做加法。寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。

寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。 1.使用++,- -運算符 class Solution { public: int Add(int num1, int num2) { i

原创 Linux套接字的結構定義

Linux 在頭文件 sys/socket.h 中定義了一種通用的套接字結構類型,以供不同的協議進行調用,對其說明如下: struct sockaddr { unsigned short int sa_family;//套

原创 Linux的網絡基礎操作函數——域名轉換函數族

在實際的網絡應用中,常常會使用類似 “www sina. com.cn" 這樣的域名替代 IP 地址來標識一個服務器,所以需要函數將域名和實際的 IP 地址進行轉換。 Linux 在 netdb.h 頭文件中定義了一個結構體,用於

原创 Linux的網絡基礎操作函數——字節操作函數族

套接字地址爲多字節數據而不是以空字符結尾,所以 Linux 提供了兩組函數來處理這個多字節數據。 1. 第一組函數 第一組函數是和 BSD 系統兼容的函數,包括了 bzero、beopy 和 bcmp。 函數 bzero 將參數

原创 Linux 的網絡套接字操作函數——建立連接函數

當使用 socket 函數建立一個套接字並且綁定了地址之後,即可使用 connect 函數來和服務器建立一個連接。 #include <sys/types.h> #include <sys/socket.h> int connec

原创 Linux 的 TCP 編程

TCP 是 TCP/IP 協議族中面向連接的可靠協議,本文將介紹其工作流程以及在 Linux 中對其進行編程的方法。 TCP基礎 TCP 向相鄰的高層提供服務。 TCP 的上一層就是應用層,因此,TCP 數據傳輸實現了從一個應用程

原创 Linux 的網絡套接字操作函數——綁定套接字函數

在創立了套接字之後需要將本地地址和套接字綁定在一起,此時可以調用 bind 函數。 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const

原创 Linux的網絡基礎操作函數——IP地址轉換函數族

通常 IP 地址會被表示爲 “192.168.1.1” 這樣的 “點分十進制” 方式,而在 Linux 的網絡編程中會使用32位二進制值,所以 Limux 提供了函數族用於將這兩個數值進行轉換,這些函數包括 inet_aton、i

原创 Linux進程的基礎屬性

Linux 系統上所有運行的任務都可以是一個進程,每個用戶任務、每個系統管理,都可以稱之爲進程,Linux 用分時管理的方法使所有的任務共同分享系統資源。 進程的定義: 課本概念:程序的一個執行實例,正在執行的程序。 內核觀點:擔

原创 Linux的網絡基礎操作函數——字節順序轉換函數

計算機內部的數據存儲通常有兩種: 大端模式:高位字節優先。(高位存在低地址) 小端模式:低位字節優先。(低位存在低地址) 以32位寬度的數據 0x12345678 爲例,大端模式和小端模式的存放方法如下表: 內存地址

原创 Linux的進程標識方法

在 Linux 中有很多進程在同時運行,可以使用兩種方式對這些進程進行標識: 進程描述符的地址 進程標識符 對於當前操作系統中的每個獨立進程來說,其對應的進程描述符的地址以及進程標識符都是唯一的。 1. 進程描述符 爲了對進程

原创 Linux的進程操作(創建進程)

在Linux中,創建一個新進程的唯一方法是由某個已存在的進程調用 fork 或 vfork 函數,被創建的新進程稱爲子進程(child process),已存在的進程稱爲父進程(father process)。 1. fork 函

原创 退出進程和銷燬進程

退出進程 當一個進程執行結束後必須要退出,退出時內核會進行一系列的相應操作。在 Linux 中,共有 8 種進程的退出方法,其中包括 5 種正常的方法和 3 種異常的方法。 通常來說 Linux 的應用代碼會調用 exit 系列函

原创 Linux的進程操作(執行進程)

如果需要在子進程中執行一些自定義的動作,則需要調用 exec 函數族。 當進程調用 exec 系列函數的時候,該進程執行的程序被立即替換爲新的程序,而新程序則從 main 函數開始執行,並立刻替換掉了當前進程的正文段、數據段、堆和