2012-12-26 65 views
1

我想創建一個程序,該程序會導致正在運行的gedit進程在使用C的新選項卡中打開.txt文件。該文件將成爲我爲程序提供的參數。但是,我想完全避免使用system()使用C程序在外部打開文件

我在Linux上。這可能嗎?如果是這樣,通過什麼手段?

+1

你想編寫一個程序,當運行時在gedit中打開另一個包含作爲參數傳遞給程序的文本文件的選項卡? –

+0

解釋一點點....你打算寫一個程序,在gedit中的標籤中打開文件? –

+0

我猜他正在尋找某種'system()'調用... –

回答

1

你不需要system()。您可以使用fork/execlp

if(!fork()) 
    execlp("gedit", "gedit", filename, NULL); 

的gedit的版本是在我的筆記本電腦默認使用一個新的標籤,如果有一個運行實例了,但我不知道其他版本。

0

這裏是一個可能的解決方案:

步驟1.修改gedit源文件(功能:is_in_viewport()返回TRUE) (見this link)。

步驟2.使用程序fork()/execl()並調用該修改的gedit(有幾個例子 here)。

+0

這似乎是一個非常糟糕的主意,隨身攜帶一個被破解且不可避免的過時版本的gedit,這樣你的應用程序就可以彈出這個幾乎不是很完美的gedit。另外,包管理。 – user268396

+0

@ user268396,gEdit算法視點計算在新窗口中打開文件或現有*必須*爲了解決這個需求而被回答(除非你想在這裏改變需求),我的解決方案也是如此。您可以自由展示您的解決方案。 – 2012-12-27 00:53:04

+0

「我想避免'系統()'」通常不會是一個必須具備的要求。所以它可以彎曲,特別是如果它導致更好的解決方案(或者堅持希望產生更糟糕的結果,無論您選擇哪種觀點)。至於其他:我不知道你在說什麼;那裏再次,英語不是我的母語,所以我可能只是想念明顯。 – user268396

1

執行此操作的標準方法是不將編輯器的可執行文件名硬編碼到您的應用程序中。用戶可能根本沒有安裝gedit(如果系統運行Gnome,它大多隻在那裏)。你所做的是使用xdg-open和你想打開的文件作爲它的參數。例如:

system("xdg-open myfile.txt"); 

如果用戶使用gedit作爲默認編輯器,那麼如果gedit已經在運行,這將在新選項卡中打開文件。如果它沒有運行,它將首先啓動。