導航:首頁 > 文件教程 > linuxunlink頭文件

linuxunlink頭文件

發布時間:2023-04-10 04:33:03

❶ 在tp裡面怎麼使用unlink函數刪除上傳的圖片文件

使用unlink{321}函數刪除上傳的圖片步驟如下:

1、新建一個321.php,添加php的界定符(<?php?>)。注意申明PHP與瀏覽器交互的文件類型和編碼:

6、根據原始網頁代碼,判斷圖片刪除是否成功即可。

(1)linuxunlink頭文件擴展閱讀:

關於函數unlink的解讀

1、頭文件:unistd.h(在WIN32系統中為windows.h)

2、函數功能:刪除一個文件的目錄項並減少它的鏈接數,若成功則返回0,否則返回-1,錯誤原因存於error。如果想通過調用這個函數來成功刪除文件,你就必須擁有這個文件的所屬目錄的寫和執行許可權。

3、注意事項:unlink函數會刪除參數pathname指定的文件。如果該文件名為最後連接點,但有其他進程打開了此文件,則在所有關於此文件的文件描述詞皆關閉後才會刪除。如果參數pathname為一符號連接,則此連接會被刪除。

❷ linux用什麼標識,描述和控制文件

Linux的文件標識符,和Windows的就是文件名不同,它相當於文件的一個指針。在linux的C語言中,除了用通用的《【C】文件讀寫問題》(點擊打開鏈)中介紹過的fopen等c語言通用操作文件以外,其Linux應用請參考《【Linux】利用C語言文件流復制單一文件),還能用文件標識符還來操作文件。這也是Linux中C語言,最底層,最原始控制文件的方式,其函數open,read,write,close已經完美地表明這一點。同時,在Linux無論是文件、設備和管道,甚至是個可操作對象對可以視作文件來對待,具體表現為都可以用這個文件標識符來操作他們。
文件標識符非常獨特,並不是指針,其變數類型就是大家非常常用的int。
至於這個東西怎麼用,具體請看如下文件讀寫程序

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>//文件控制
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 512//緩沖區的大小
const char* FILEPATH="/tmp/file.txt";//文件目錄
int main(void) {
int fd;//文件標識符,
char *s = "被折騰的文字";
char buffer[MAXSIZE+1];//用來接字元的緩沖區
int size;//讀入的文件長度
if((fd=open(FILEPATH,O_CREAT|O_TRUNC|O_RDWR,0777))<0){
//O_CREAT如果指定文件不存在,則創建這個文件,O_EXCL如果要創建的文件已存在,則返回 -1,並且修改 errno 的值
//O_APPEND每次寫操作都寫入文件的末尾,O_TRUNC如果文件存在,並且以只寫/讀寫方式打開,則清空文件全部內容
//O_RDONLY只讀模式,O_WRONLY只寫模式,O_RDWR讀寫模式
//0777為最高許可權
perror("打開文件失敗!");
exit(1);
}
if((write(fd,s,strlen(s)))<0){
perror("寫入文件失敗!");
exit(1);
}
//lseek(fd,0,SEEK_SET);//即把文件指針移至buf文件的開始處
lseek(fd,-strlen(s),SEEK_END);//即把文件指針往從結尾處向前移動strlen(s)個字元
if((size=read(fd,buffer,MAXSIZE))<0){
perror("讀入文件失敗!");
exit(1);
}else{
buffer[size]='\0';//字元串數組封口
printf("%s\n",buffer);
}
if(close(fd)<0) {
perror("關鍵文件失敗!");
exit(1);
}
unlink(FILEPATH);//刪除文件
exit(0);
}
這個程序的一大堆頭文件,是沒辦法的,因為所用到的函數需要的基本頭文件就是這么多,但這些頭文件都是Linux的基本頭文件,能夠拿來直接用。

程序首先打開並同時利用open的參數創建一個文件,之後向這個文件,通過read函數寫入一個名為「緩沖區」buffer的字元數組,也就是字元串string的一些東西,然後,寫入完畢,因為文件操作游標將會移到文件最後,所以我們要先將其移迴文件頭,再利用write函數讀入這個文件的內容到buffer,並列印到屏幕,最後再用close關閉文件標識符與文件的連接,並利用unlink刪除這個文件,如果沒有close,unlink將不起作用,因為這個程序正在佔用這個/tmp/file.txt,無法刪除,如果要強制刪除可以考慮remove函數。
所以,上述代碼的運行結果如下圖:

最後,這個文件自然是要被刪除的了,肯定是沒有的:

上述程序很簡單,但我們更多應該關注這里文件標識符的作用。fd這個int就是文件標識符,相當於FILE *的作用,但他就是一個int。實質上,這個int非常獨特,同open函數,int fd裡面存著要被操作文件的地址,但它卻又不是int *,之後的write和read函數都要根據這個fd所指明的方向來,你可以發現write,read參數都有一個地方,填入了fd,可要求填入的,卻是一個int變數,這在windows裡面是沒有的,同時不了解文件標識符的人,看到write和read的使用可能是雲里霧里的,之後的close就更不用說了,就是清楚這個fd與被操作文件的關聯關系。
unlink函數則和文件標識符無關,需要一個文件路徑的參數。

❸ linux shell中,unlink和rm命令有什麼區別

strace 跑 rm 與 unlink,結果有不同地方.

1. strace rm 1.txt 片段

access("1.txt", W_OK) = 0
unlinkat(AT_FDCWD, "1.txt", 0) = 0

2. strace unlink 2.txt 片段

unlink("2.txt") = 0

我想可以再看看 unlink 與 unlinkat 的 manpage 說明應該有答案 ? :)

The unlinkat() system call operates in exactly the same way as either unlink(2) or rmdir(2) (depending on
whether or not flags includes the AT_REMOVEDIR flag) except for the differences described in this manual
page.

AT_REMOVEDIR
By default, unlinkat() performs the equivalent of unlink(2) on pathname. If the AT_REMOVEDIR flag
is specified, then performs the equivalent of rmdir(2) on pathname.

測試用 strace rm -r testdir 方式刪除一個目錄與其下的檔案目錄,結果為:

access("testdir", W_OK) = 0
unlinkat(AT_FDCWD, "testdir", AT_REMOVEDIR) = 0

所以結論一般命令用 rm 或是 unlink 都可以刪除檔案,因為都是一樣的意思。系統面呼叫來說刪除檔案一般還是使用 unlink() 呼叫,只是有另外提供 unlinkat 提供相同機制,但是可以刪除檔案或是空目錄。

不過我想其他系統的 rm 與 unlink 是有差異的,比方 solaris 就不一樣。

-bash-3.00$ uname -a
SunOS solaris 5.10 Generic_118855-33 i86pc i386 i86pc

man unlink :

System Administration Commands link(1M)

NAME
link, unlink - link and unlink files and directories

SYNOPSIS
/usr/sbin/link existing-file new-file

/usr/xpg4/bin/link existing-file new-file

/usr/sbin/unlink file

DESCRIPTION
The link and unlink commands link and unlink files and
directories. Only super-users can use these commands on
directories.

❹ linux和windows有沒有發送tcp協議消息的命令行程序

下面大概分幾個方面進行羅列:

Linux要包含

[cpp]
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
等頭文件,而windows下則是包含
[cpp]
#include <winsock.h>


Linux中socket為整形,Windows中為一個SOCKET。
Linux中關閉socket為close,Windows中為closesocket。
Linux中有變數socklen_t,Windows中直接為int。
因為linux中的socket與普通的fd一樣,所以可以在TCP的socket中,發送與接收數據時,直接使用read和write。而windows只能使用recv和send。
設置socet選項,比如設置socket為非阻塞的。Linux下為

[cpp]
flag = fcntl (fd, F_GETFL);
fcntl (fd, F_SETFL, flag | O_NONBLOCK);
,Windows下為
[cpp]
flag = 1;
ioctlsocket (fd, FIONBIO, (unsigned long *) &flag);

當非阻塞socket的TCP連接正在進行時,Linux的錯誤號為EINPROGRESS,Windows的錯誤號為WSAEWOULDBLOCK。

file
Linux下面,文件換行是"\n",而windows下面是"\r\n"。
Linux下面,目錄分隔符是"/",而windows下面是"\"。
Linux與Windows下面,均可以使用stat調用來查詢文件信息。但是,Linux只支持2G大小,而Windows只支持4G大小。為了支持更大的文件查詢,可以在Linux環境下加

_FILE_OFFSET_BITS=64定義,在Windows下面使用_stat64調用,入參為漏核鉛struct __stat64。
Linux中可根據stat的st_mode判斷文件類型,有S_ISREG、S_ISDIR等宏。Windows中沒有,需要自己定義相應的宏,如

[cpp]
#define S_ISREG(m) (((m) & 0170000) == (0100000))
#define S_ISDIR(m) (((m) & 0170000) == (0040000))
Linux中刪除文件是unlink,Windows中為DeleteFile。

time

Linux中,time_t結構是長整形。而windows中,time_t結構是64位的整形。如果要在windows始time_t為32位無符號整形,可以加宏定義,_USE_32BIT_TIME_T。
Linux中,sleep的單位為秒。Windows中,Sleep的單位返好為毫秒。即,Linux下sleep (1),在Windows環境下則需要Sleep (1000)。
Windows中的timecmp宏,不支持大於等於或者小於等於。
Windows中沒有struct timeval結構的加減宏可以使用,需要手動氏改定義:

❺ unix的系統調用unlink函數需要哪些頭文件

函數原型: int unlink(char *pathname); 一、文件系統基礎. 理解unlink()之前,先要對unix的文件系統有基本的了解.一個unix文件系統由4個部分組成: 自舉塊,超級塊,i表,目錄塊和數據塊. 而現在,我們需要關心的僅僅是後兩部分. 1、i表。 是i節點的集合.i節點是一個固定長度的記錄項(通常是64位元組或128位元組,不同的文件系統其長度可能不一樣),它包含文件的相關信息:文件類型,文件長度,文件存取許可,和指向實際的數據塊的指針等,以及一個連接計數,用以指示連接到此i節點的目錄項的數目.不知道什麼是目錄項? 不要緊,馬上就會講到. 2、目錄塊和數據塊. 數據塊,不用我講,相信都知道是文件實際在磁碟上的數據了吧! 目錄塊,是目錄項的集合.每一個目錄項中包含2個數據:文件名,i節點號.文件名就是通常我們用ls命令所看到的,i節點號就是該目錄項所連接到的i節點. 3、連接到i節點. 可能有細心的朋友就已發現,i節點中的連接計數是用來干什麼的?那是因為unix允許多個目錄項指向同一個文件數據(指向同一i節點).有多少個目錄項指向同一i節點,此i節點連接計數就等於多少. 如果仍然有人對文件系統的結構不太清楚,那麼請看下面這2個圖: 對上面幾個概念的認識,讓我們知道unix的文件系統的用戶介面就是目錄項,那麼我們通過目錄項訪問文件的過程就應該是,內核根據目錄項的i節點號找到對應的i節點,再通過i節點返迴文件的屬性,或者讀取文件的實際數據內容.但為什麼unix要採用三層結構(目錄項--i節點--數據塊)管理文件呢? 例如為什麼不是直接將文件名放入i節點採用二層結構?這個相信大家自己不難理解. 二、unlink()函數 終於到unlink()函數了.很多人都知道unlink()的作用是刪除文件,這是因為大多數時候一個文件只被一個目錄項連接,而不知道實際上它的作用是僅僅是刪除指定的目錄項,以及將此目錄項對應的文件的連接計數減一.如果還有其他的目錄項連接到此文件,可以通過其他目錄項讀取文件內容.只有當文件的連接計數為0時,內核才將文件內容刪除. #include #include #include #include int main() { int fd; char buff[30]; fd = creat("test1",777); if (fd == -1) { printf("creat file error!!\n"); return 1; } write(fd,"this is a test",30); close(fd); link("test1","test2"); /*新建一個連接到test1的目錄項*/ system("ls"); /*查看是否有此2文件*/ unlink("test1"); system("ls"); /*查看是否將test1刪除*/ fd = open("test2",O_RDONLY); if (fd == -1) { printf("open file error!!\n"); return 1; } read(fd,buff,30); printf("content of file test2: %s\n",buff); close(fd); return 0; } 但也有可能,一個文件的連接只有一個,但調用unlink之後,文件不存在了,磁碟空間卻仍然沒有得到釋放.看下面這個例子: int main() { int fd; char buff[30]; fd = creat("test1",777); if (fd == -1) { printf("creat file error!!\n"); return 1; } fd = open("test1",O_WRONLY); if (fd == -1) { printf("open file error!!\n"); return 1; } write(fd,"this is a test",30); close(fd); system("df"); /*刪除前列印出文件系統的磁碟空間使用情況*/ unlink("test1"); system("ls"); /*查看是否刪除成功*/ system("df"); /*刪除後列印出文件系統的磁碟空間使用情況*/ return 0; } 運行此程序你會發現刪除前後磁碟空間完全沒有變化,但ls時,文件確實已經不在了.這又是為什麼呢?哦,你已經發現了,文件被打開2次,但只關閉了一次.問題就在這里,內核對於每個被打開的文件,保存有其打開的進程計數,關閉一個文件時,內核先檢查其打開的進程計數,如果為0,再檢查其連接計數,如果也為0,才會刪除文件內容.當程序退出或返回,內核自動關閉所有被進程打開的文件,這就是為什麼當程序運行結束後,再調用df查看時,磁碟空間已經釋放的原因. unlink的這個特性也常被用來確保即使是在程序崩潰時,其所創建的臨時文件也不會保存下來.在用open或creat創建一個文件之後,馬上調用unlink(),這樣因為文件仍然是打開的,所以內容不會被刪除.而當程序退出時(正常或異常),內容就會被自動刪除.

❻ LINUX 怎麼刪除 文件link

linux ln(link) 命令詳解

功能說明:連接文件或目錄。

語 法:ln [-bdfinsv][-S <字尾備份字元串>][-V <備份方式>][--help][--version][源文件或目錄][目標文件或目錄] 或 ln [-bdfinsv][-S <字尾備份字元串>][-V <備份方式>][--help][--version][源文件或目錄...][目的目錄]

補充說明:ln指令用在連接文件或目錄,如同時指定兩個以上的文件或目錄,且最後的目的地是一個已經存在的目錄,則會把前面指定的所有文件或目錄復制到該目錄中。若同時指定多個文件或目錄,且最後的目的地並非是一個已存在的目錄,則會出現錯誤信息。

參 數:
-b或--backup 刪除,覆蓋目標文件之前的備份。
-d或-F或--directory 建立目錄的硬連接。
-f或--force 強行建立文件或目錄的連接,不論文件或目錄是否存在。
-i或--interactive 覆蓋既有文件之前先詢問用戶。
-n或--no-dereference 把符號連接的目的目錄視為一般文件。
-s或--symbolic 對源文件建立符號連接,而非硬連接。
-S<字尾備份字元串>或--suffix=<字尾備份字元串> 用"-b"參數備份目標文件.

❼ Linux信號量

信號量是包含一個非負整數型的變數,並且帶有兩個原子操作wait和signal。Wait還可以被稱為down、P或lock,signal還可以被稱為up、V、unlock或post。在UNIX的API中(POSIX標准)用的是wait和post。

對於wait操作,如果信號量的非負整形變數S大於0,wait就將其減1,如果S等於0,wait就將調用線程阻塞;對於post操作,如果有線程在信號量上阻塞(此時S等於0),post就會解除對某個等待線程的阻塞,使其從wait中返回,如果沒有線程阻塞在信號量上,post就將S加1.

由此可見,S可以被理解為一種資源的數量,信號量即是通過控制這種資源的分配來實現互斥和同步的。如果把S設為1,那麼信號量即可使多線程並發運行。另外,信號量不僅允許使用者申請和釋放資源,而且還允許使用者創造資源,這就賦予了信號量實現同步的功能。可見信號量的功能要比互斥量豐富許多。

POSIX信號量是一個sem_t類型的變數,但POSIX有兩種信號量的實現機制: 無名信號量 命名信號量 。無名信號量只可以在共享內存的情況下,比如實現進程中各個線程之間的互斥和同步,因此無名信號量也被稱作基於內存的信號量;命名信號量通常用於不共享內存的情況下,比如進程間通信。

同時,在創建信號量時,根據信號量取值的不同,POSIX信號量還可以分為:

下面是POSIX信號量函數介面:

信號量的函數都以sem_開頭,線程中使用的基本信號函數有4個,他們都聲明在頭文件semaphore.h中,該頭文件定義了用於信號量操作的sem_t類型:

【sem_init函數】:

該函數用於創建信號量,原型如下:

該函數初始化由sem指向的信號對象,設置它的共享選項,並給它一個初始的整數值。pshared控制信號量的類型,如果其值為0,就表示信號量是當前進程的局部信號量,否則信號量就可以在多個進程間共享,value為sem的初始值。

該函數調用成功返回0,失敗返回-1。

【sem_destroy函數】:

該函數用於對用完的信號量進行清理,其原型如下:

成功返回0,失敗返回-1。

【sem_wait函數】:

該函數用於以原子操作的方式將信號量的值減1。原子操作就是,如果兩個線程企圖同時給一個信號量加1或減1,它們之間不會互相干擾。其原型如下:

sem指向的對象是sem_init調用初始化的信號量。調用成功返回0,失敗返回-1。

sem_trywait()則是sem_wait()的非阻塞版本,當條件不滿足時(信號量為0時),該函數直接返回EAGAIN錯誤而不會阻塞等待。

sem_timedwait()功能與sem_wait()類似,只是在指定的abs_timeout時間內等待,超過時間則直接返回ETIMEDOUT錯誤。

【sem_post函數】:

該函數用於以原子操作的方式將信號量的值加1,其原型如下:

與sem_wait一樣,sem指向的對象是由sem_init調用初始化的信號量。調用成功時返回0,失敗返回-1。

【sem_getvalue函數】:

該函數返回當前信號量的值,通過restrict輸出參數返回。如果當前信號量已經上鎖(即同步對象不可用),那麼返回值為0,或為負數,其絕對值就是等待該信號量解鎖的線程數。

【實例1】:

【實例2】:

之所以稱為命名信號量,是因為它有一個名字、一個用戶ID、一個組ID和許可權。這些是提供給不共享內存的那些進程使用命名信號量的介面。命名信號量的名字是一個遵守路徑名構造規則的字元串。

【sem_open函數】:

該函數用於創建或打開一個命名信號量,其原型如下:

參數name是一個標識信號量的字元串。參數oflag用來確定是創建信號量還是連接已有的信號量。

oflag的參數可以為0,O_CREAT或O_EXCL:如果為0,表示打開一個已存在的信號量;如果為O_CREAT,表示如果信號量不存在就創建一個信號量,如果存在則打開被返回,此時mode和value都需要指定;如果為O_CREAT|O_EXCL,表示如果信號量存在則返回錯誤。

mode參數用於創建信號量時指定信號量的許可權位,和open函數一樣,包括:S_IRUSR、S_IWUSR、S_IRGRP、S_IWGRP、S_IROTH、S_IWOTH。

value表示創建信號量時,信號量的初始值。

【sem_close函數】:

該函數用於關閉命名信號量:

單個程序可以用sem_close函數關閉命名信號量,但是這樣做並不能將信號量從系統中刪除,因為命名信號量在單個程序執行之外是具有持久性的。當進程調用_exit、exit、exec或從main返回時,進程打開的命名信號量同樣會被關閉。

【sem_unlink函數】:

sem_unlink函數用於在所有進程關閉了命名信號量之後,將信號量從系統中刪除:

【信號量操作函數】:

與無名信號量一樣,操作信號量的函數如下:

命名信號量是隨內核持續的。當命名信號量創建後,即使當前沒有進程打開某個信號量,它的值依然保持,直到內核重新自舉或調用sem_unlink()刪除該信號量。

無名信號量的持續性要根據信號量在內存中的位置確定:

很多時候信號量、互斥量和條件變數都可以在某種應用中使用,那這三者的差異有哪些呢?下面列出了這三者之間的差異:

❽ linux環境下,設計兩個程序,使用管道傳輸文件,用C語言實現(最好不要調用shell命令)

我提供的代碼如下,自己補充main函數哈,希望野拍能夠幫到你:)
//相關頭文件:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

發送方坦脊鍵send:
void fifo_pro()
{
char s[128];
int fd;
FILE *fp;
fp = fopen("./a.txt", "讓巧r");
mkfifo("/tmp/fifo.tst", 0644);
fd = open("/tmp/fifo.tst", O_WRONLY);
while(fgets(s, 127, fp) != NULL) {
write(fd, s, strlen(s));
//printf("%s",s);
}
close(fd);
fclose(fp);
unlink("/tmp/fifo.tst");
}

接收方get:
char s[128];
int fd = open("/tmp/fifo.tst", O_RDONLY);
int fd2 = open("./b.txt", O_WRONLY)
memset(s, 0, 128);
while(read(fd, s, 128) > 0) {
printf("%s", s);
write(fd2, s, 128);
}
close(fd2);
close(fd);

❾ unlink是什麼意思

unlink(lockFile.getFullFileName().c_str()); 取得該鎖定文件的全名,釋放對該文件的控制權,允許別的程序進入該文件。

uplink
[英][ˈʌplɪŋk][美]['ʌplɪŋk]
n.
向上傳輸,上行線鋒或,衛星上行鏈路;
網路
從地面輸送信息; 逆通鏈; 上行線路的;
形近詞:UPLINKunlinkupline


3. 【體】公開賽 編輯本段open開放 現在不僅是形容某個地區對外開放,提供優惠政策,現在也是形容人的個性開放,思想前衛,不因循守舊,不避諱令人敏感的問題。

比如一個人的穿著很大膽,或者說的話寫的文章用詞大膽。 編輯本段open在PB和C和linux C程序語言中 PB程序語言中open 功能 打開窗口。

閱讀全文

與linuxunlink頭文件相關的資料

熱點內容
ps前往文件夾 瀏覽:694
信捷plc編程用哪個軟體 瀏覽:939
vba導入文件 瀏覽:690
更新後版本英文怎麼說 瀏覽:267
桌面雲配置文件分離 瀏覽:505
iphone5如何升級4g網路 瀏覽:5
團購是在哪個app 瀏覽:897
打開多個word文檔圖片就不能顯示 瀏覽:855
騰訊新聞怎麼切換版本 瀏覽:269
app安裝失敗用不了 瀏覽:326
桌面文件滑鼠點開會變大變小 瀏覽:536
手機誤刪系統文件開不了機 瀏覽:883
微信兔子甩耳朵 瀏覽:998
android藍牙傳文件在哪裡 瀏覽:354
蘋果6s軟解是真的嗎 瀏覽:310
c語言代碼量大 瀏覽:874
最新網路衛星導航如何使用 瀏覽:425
以下哪些文件屬於圖像文件 瀏覽:774
zycommentjs 瀏覽:414
確認全血細胞減少看哪些數據 瀏覽:265

友情鏈接