當前位置:首頁 » 操作系統 » linux傳參

linux傳參

發布時間: 2022-04-18 05:45:25

linux 調用腳本 傳遞參數怎麼傳遞正則表達式

代碼如下:
awk
'{print
v1,
v2}'
v1=$VAR1
v2=$VAR2
input_file
#
或者,這種方法不是所有的awk分支都支持
復制代碼代碼如下:
awk
-v
v1=$VAR1
-v
v2=$VAR2
'{print
v1,
v2}'
input_file

❷ linux 線程 傳參

不是很明白你的問題
read在main做,獲得的值通過
pthread_create(&id,null,fun,(void *)傳遞值);
傳給進程fun就可以了,當然,fun(void) 改成fun(參數類型 變數名)

❸ linux系統下,c語言pthread多線程編程傳參問題

3個線程使用的都是同一個info

代碼 Info_t *info= (Info_t *)malloc(sizeof(Info_t));只創建了一個info

pthread_create(&threads[i],NULL,calMatrix,(void *)info); 三個線程使用的是同一個

我把你的代碼改了下:

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

intmtc[3]={0};//resultmatrix

typedefstruct
{
intprank;
int*mta;
int*mtb;
}Info_t;

void*calMatrix(void*arg)
{
inti;
Info_t*info=(Info_t*)arg;
intprank=info->prank;
fprintf(stdout,"calMatrix:prankis%d ",prank);

for(i=0;i<3;i++)
mtc[prank]+=info->mta[i]*info->mtb[i];

returnNULL;
}

intmain(intargc,char**argv)
{
inti,j,k=0;
intmta[3][3];
intmtb[3]={1};
Info_t*info=(Info_t*)malloc(sizeof(Info_t)*3);

for(i=0;i<3;i++)
for(j=0;j<3;j++)
mta[i][j]=k++;
/*3threads*/
pthread_t*threads=(pthread_t*)malloc(sizeof(pthread_t)*3);
fprintf(stdout," ");fflush(stdout);
for(i=0;i<3;i++)
{
info[i].prank=i;
info[i].mta=mta[i];
info[i].mtb=mtb;
pthread_create(&threads[i],NULL,calMatrix,(void*)(&info[i]));
}
for(i=0;i<3;i++)
pthread_join(threads[i],NULL);

fprintf(stdout," ====thematrixresult==== ");
fflush(stdout);

for(i=0;i<3;i++)
{
fprintf(stdout,"mtc[%d]=%d ",i,mtc[i]);
fflush(stdout);
}
return0;
}

矩陣的計算我忘記了,你運行看看結果對不對

❹ linux 調用腳本怎麼傳腳本參數

Linux shell腳本開始執行時,系統會初始化一些腳本的環境變數和參數變數,這些變數是可以直接使用的,下面是一些參數變數:
$1,$2,$3......:代表腳本程序的參數,腳本有幾個參數數字就到幾;
那$0代表什麼呢?當然是腳本的名字了
還有和腳本參數有關的一個腳本環境變數:$#
它代表傳遞給腳本的參數個數。
知道了這些,你就可以在你編寫的腳本內編寫處理腳本參數的代碼,一旦你的腳本有了對參數的處理,你就可以這樣調用有參數的腳本:
./腳本名 參數1 參數2......
參數和腳本名、參數和參數之間用空格分開,和使用shell命令的格式是一樣的。

❺ linux 系統調用時參數是怎麼傳遞的

sh 絕對路徑/xxx.sh 參數1 參數2 參數3........參數n --------------------------------------------------------------------------------- 如果你保存臨時文件的話,可以使用xargs 比如腳本文件為1.sh,而參數保存在args文件中,用一個命令得到參數內容 cat args 那麼最後可以這樣執行 cat args xargs sh 1.sh 如果不打算保存臨時文件,那你只好在腳本中寫清楚要如何調用,參數有幾個。 比如你使用2.sh調用1.sh,在2.sh 中寫清楚 1.sh $arg1 $arg2這樣就可以了。 當然腳本中的arg1,arg2也可以是最初的第一個腳本調用傳遞進來的,也可以是硬編碼寫死的。

❻ linux下命令傳參問題

什麼前者 後者
find / -name abc
這個是查找『根』下面 名為abc 的文件
./configure --prefix=/root
這個是源碼包安裝編譯三步 當中的第一步 --prefix=/root 將軟體安裝在root目錄下

❼ linux下 如何用perl腳本給程序傳參(argv)

把執行perl腳本的指令放在反引號之間
./test `perl -e 'print "A"x128'`
`這個符號在鍵盤tab的上邊,1的左邊
還可以放在$()中
./test $(perl -e 'print "A"x128')
這個test是一個linux命令,最好不要用作程序名

❽ linux下怎樣向交到後台作業的腳本傳遞參數

sh 絕對路徑/xxx.sh 參數1 參數2 參數3........參數n

---------------------------------------------------------------------------------
如果你保存臨時文件的話,可以使用xargs
比如腳本文件為1.sh,而參數保存在args文件中,用一個命令得到參數內容
cat args
那麼最後可以這樣執行
cat args |xargs sh 1.sh

如果不打算保存臨時文件,那你只好在腳本中寫清楚要如何調用,參數有幾個。
比如你使用2.sh調用1.sh,在2.sh 中寫清楚
1.sh $arg1 $arg2這樣就可以了。
當然腳本中的arg1,arg2也可以是最初的第一個腳本調用傳遞進來的,也可以是硬編碼寫死的。

❾ linux c 引用傳遞參數

C/C++函數參數的傳遞方式有三種:值傳遞(pass by value)、指針傳遞(pass bypointer)、引用傳遞(pass by reference)。
C/C++函數參數的傳遞通道是通過堆棧傳遞,默認遵循__cdecl(C聲明方式),參數由調用者從右往左逐個壓入堆棧,在函數調用完成之後再由調用者恢復堆棧。(Win32API遵循stdcall傳參規范的,不在本文討論范圍)
下面是測試代碼
void Swap(__int64* _pnX, __int64* _pnY)
{
__int64 nTemp = *_pnX;
*_pnX = *_pnY;
*_pnY = nTemp;
}
void Swap(__int64& _nX, __int64& _nY)
{
__int64 nTemp = _nX;
_nX = _nY;
_nY = nTemp;
}
void SetValue(__int64 _nX)
{
__int64 nTemp = _nX;
}
// Test001
void GetMemory(__int64* _pBuff)
{
_pBuff = new __int64[4];
}
// Test002
void GetMemory(__int64** _ppBuff)
{
*_ppBuff = new __int64[4];
}
int _tmain(int argc, _TCHAR* argv[])
{
__int64 nA = 0x10;
__int64 nB = 0x20;
// Test to pass by pointer
Swap(&nA, &nB);
// Test to pass by reference
Swap(nA, nB);
// Test to pass by value
SetValue(nA);
// Test the pointer that points the pointer
__int64* _pArray = NULL;
GetMemory(&_pArray);
delete[] _pArray;
_pArray = NULL;
// Test the pointer
GetMemory(_pArray);
return 0;
}
指針傳遞和引用傳遞
// 下面看一下對應的反匯編的代碼(VS版)
__int64 nA = 0x10;
0041370E mov dword ptr [nA],10h
mov dword ptr [ebp-8],0
__int64 nB = 0x20;
0041371C mov dword ptr [nB],20h
mov dword ptr [ebp-18h],0
// Test to pass by pointer
Swap(&nA, &nB);
0041372A lea eax,[nB]
0041372D push eax
0041372E lea ecx,[nA]
push ecx
call Swap (4111E5h)
add esp,8
// Test to pass by reference
Swap(nA, nB);
0041373A lea eax,[nB]
0041373D push eax
0041373E lea ecx,[nA]
push ecx
call Swap (4111E0h)
add esp,8
// GCC版
0x00401582 <+30>: lea eax,[esp+0x18]
0x00401586 <+34>: mov DWORD PTR [esp+0x4],eax
0x0040158a <+38>: lea eax,[esp+0x1c]
0x0040158e <+42>: mov DWORD PTR [esp],eax
0x00401591 <+45>: call 0x401520 <Swap(int*, int*)>
0x00401596 <+50>: lea eax,[esp+0x18]
0x0040159a <+54>: mov DWORD PTR [esp+0x4],eax
0x0040159e <+58>: lea eax,[esp+0x1c]
0x004015a2 <+62>: mov DWORD PTR [esp],eax
0x004015a5 <+65>: call 0x401542 <Swap(int&, int&)>
通過上面的反匯編代碼,我們可以看出指針傳遞和引用傳遞在機制是一樣的,都是將指針值(即地址)壓入棧中,調用函數,然後恢復棧。Swap(nA, nB)和Swap(&nA, &nB);在實際上的匯編代碼也基本上一模一樣,都是從棧中取出地址來。由此可以看出引用和指針在效率上是一樣的。這也是為什麼指針和引用都可以達到多態的效果。指針傳遞和引用傳遞其實都是改變的地址指向的內存上的值來達到修改參數的效果。
值傳遞
下面是值傳遞對應的反匯編代碼
// Test to pass by value
SetValue(nA);
0041374A mov eax,dword ptr [ebp-8]
0041374D push eax
0041374E mov ecx,dword ptr [nA]
00413751 push ecx
00413752 call SetValue (4111EAh)
00413757 add esp,8
因為我的機器是32位的CPU,從上面的匯編代碼可以看64Bit的變數被分成2個32Bit的參數壓入棧中。這也是我們常說的,值傳遞會形成一個拷貝。如果是一個自定義的結構類型,並且有很多參數,那麼如果用值傳遞,這個結構體將被分割為非常多個32Bit的逐個拷貝到棧中去,這樣的參數傳遞效率是非常慢的。所以結構體等自定義類型,都使用引用傳遞,如果不希望別人修改結構體變數,可以加上const修飾,如(const MY_STRUCT& _value);
下面來看一下Test001函數對應的反匯編代碼的參數傳遞
__int64* _pArray = NULL;
004137E0 mov dword ptr [_pArray],0
// Test the pointer
GetMemory(_pArray);
mov eax,dword ptr [_pArray]
push eax
call GetMemory (411203h)
0041381B add esp,4
從上面的匯編代碼可以看出,其實是0被壓入到棧中作為參數,所以GetMemory(_pArray)無論做什麼事,其實都與指針變數_pArray無關。GetMemory()分配的空間是讓棧中的臨時變數指向的,當函數退出時,棧得到恢復,結果申請的空間沒有人管,就產生內存泄露的問題了。《C++ Primer》將參數傳遞分為引用傳遞和非引用傳遞兩種,非引用傳遞其實可以理解為值傳遞。這樣看來,指針傳遞在某種意義上也是值傳遞,因為傳遞的是指針的值(1個4BYTE的值)。值傳遞都不會改變傳入實參的值的。而且普通的指針傳遞其實是改變的指針變數指向的內容。
下面再看一下Test002函數對應的反匯編代碼的參數傳遞
__int64* _pArray = NULL;
004137E0 mov dword ptr [_pArray],0
GetMemory(&_pArray);
004137E7 lea eax,[_pArray]
004137EA push eax
004137EB call GetMemory (4111FEh)
004137F0 add esp,4
從上面的匯編代碼lea eax,[_pArray] 可以看出,_pArray的地址被壓入到棧中去了。
然後看一看GetMemory(&_pArray)的實現匯編代碼。
0x0040159b <+0>: push ebp
0x0040159c <+1>: mov ebp,esp
0x0040159e <+3>: sub esp,0x18
0x004015a1 <+6>: mov DWORD PTR [esp],0x20
0x004015a8 <+13>: call 0x473ef0 <_Znaj>
0x004015ad <+18>: mov edx,DWORD PTR [ebp+0x8]
0x004015b0 <+21>: mov DWORD PTR [edx],eax
0x004015b2 <+23>: leave
0x004015b3 <+24>: ret
藍色的代碼是分配臨時變數空間,然後調用分配空間函數分配空間,得到的空間指針即eax.
然後紅色的匯編代碼即從ebp+0x8的棧上取到上面壓入棧中的參數_pArray的地址.
mov DWORD PTR [edx],eax即相當於把分配的空間指針eax讓edx指向,也即讓_pArray指向分配的空間eax.
總之,無論是哪種參數傳遞方式,參數都是通過棧上的臨時變數來間接參與到被調用函數的。指針作為參數,其本身的值是不可能被改變的,能夠改變的是其指向的內容。引用是通過指針來實現的,所以引用和指針在效率上一樣的。

❿ Linux參數傳遞求體積

參數傳遞一般是函數傳參或程序執行傳參。
對於更加復雜的參數,如很多需要一些配置文件,程序中可通過解析文件的方法實現函數傳遞,這只需要讀取文件內容安裝格式解析介面即可,主要是文件操作及字元串操作。

熱點內容
win8用戶文件夾轉移 發布:2024-11-15 13:21:24 瀏覽:73
批量緩存淘寶教育上的視頻 發布:2024-11-15 13:20:44 瀏覽:723
如何確定手機是不是安卓 發布:2024-11-15 13:19:33 瀏覽:734
loadingbuffer怎麼配置 發布:2024-11-15 13:16:57 瀏覽:797
安卓婉兒最低市戰力在哪裡 發布:2024-11-15 13:04:02 瀏覽:852
安卓如何設置圖片模式 發布:2024-11-15 13:00:27 瀏覽:497
機房怎麼用電腦連接伺服器 發布:2024-11-15 12:52:24 瀏覽:561
刪資料庫事件 發布:2024-11-15 12:10:54 瀏覽:457
資料庫選課管理系統 發布:2024-11-15 12:10:15 瀏覽:128
android音樂波形圖 發布:2024-11-15 11:57:12 瀏覽:380